diff options
author | Bryan Boreham <bjboreham@gmail.com> | 2020-10-12 14:29:28 +0000 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2020-10-13 19:15:53 +0000 |
commit | 076a45acd5b8d2ce08a2dbe898dc9228554db92d (patch) | |
tree | 373febf6a186ba4989d73db79f907a27578e9e7f /src/fmt | |
parent | e08059f4fcacce2ff18d1cfc5fa48c942f8d46aa (diff) | |
download | go-076a45acd5b8d2ce08a2dbe898dc9228554db92d.tar.gz go-076a45acd5b8d2ce08a2dbe898dc9228554db92d.zip |
fmt: explain how Formatter interface affects verbs and flags
Formatter is mentioned further down, but it's helpful
to add it amongst the verbs and flags.
Background: I spent a while puzzling how "%+v" prints
a stack trace for github.com/pkg/errors when this isn't
documented under 'flags'.
Change-Id: Ic70145902a36780147dedca568b3cf482974fc38
GitHub-Last-Rev: 6571b499f211a2266812af66dd3b88dff602cabf
GitHub-Pull-Request: golang/go#39860
Reviewed-on: https://go-review.googlesource.com/c/go/+/240000
Reviewed-by: Rob Pike <r@golang.org>
Trust: Rob Pike <r@golang.org>
Trust: Ian Lance Taylor <iant@golang.org>
Diffstat (limited to 'src/fmt')
-rw-r--r-- | src/fmt/doc.go | 3 | ||||
-rw-r--r-- | src/fmt/print.go | 8 |
2 files changed, 6 insertions, 5 deletions
diff --git a/src/fmt/doc.go b/src/fmt/doc.go index a7115809d3..d05ee519c3 100644 --- a/src/fmt/doc.go +++ b/src/fmt/doc.go @@ -150,7 +150,8 @@ concrete value that it holds, and printing continues with the next rule. 2. If an operand implements the Formatter interface, it will - be invoked. Formatter provides fine control of formatting. + be invoked. In this case the interpretation of verbs and flags is + controlled by that implementation. 3. If the %v verb is used with the # flag (%#v) and the operand implements the GoStringer interface, that will be invoked. diff --git a/src/fmt/print.go b/src/fmt/print.go index 778b5b0938..8bc225f548 100644 --- a/src/fmt/print.go +++ b/src/fmt/print.go @@ -47,11 +47,11 @@ type State interface { Flag(c int) bool } -// Formatter is the interface implemented by values with a custom formatter. -// The implementation of Format may call Sprint(f) or Fprint(f) etc. -// to generate its output. +// Formatter is implemented by any value that has a Format method. +// The implementation controls how State and rune are interpreted, +// and may call Sprint(f) or Fprint(f) etc. to generate its output. type Formatter interface { - Format(f State, c rune) + Format(f State, verb rune) } // Stringer is implemented by any value that has a String method, |