mirror of
https://github.com/golang/go
synced 2024-11-12 02:50:25 -07:00
fmt: handle os.Error values
Handling os.Error is no different than handling fmt.Stringer here, so the code is redundant now, but it will be necessary once error goes in. Adding it now will make gofix fix it. R=r CC=golang-dev https://golang.org/cl/5331045
This commit is contained in:
parent
853c84631f
commit
0e81e508be
@ -89,10 +89,14 @@
|
||||
If an operand implements interface Formatter, that interface
|
||||
can be used for fine control of formatting.
|
||||
|
||||
If an operand implements method String() string that method
|
||||
Next, if an operand implements the error interface, the Error method
|
||||
will be used to convert the object to a string, which will then
|
||||
be formatted as required by the verb (if any). To avoid
|
||||
recursion in cases such as
|
||||
be formatted as required by the verb (if any).
|
||||
|
||||
Finally, if an operand implements method String() string that method
|
||||
will be used to convert the object to a string, which will then
|
||||
be formatted as required by the verb (if any).
|
||||
To avoid recursion in cases such as
|
||||
type X int
|
||||
func (x X) String() string { return Sprintf("%d", x) }
|
||||
cast the value before recurring:
|
||||
|
@ -630,12 +630,23 @@ func (p *pp) handleMethods(verb rune, plus, goSyntax bool, depth int) (wasString
|
||||
return
|
||||
}
|
||||
} else {
|
||||
// Is it a Stringer?
|
||||
if stringer, ok := p.field.(Stringer); ok {
|
||||
// Is it an error or Stringer?
|
||||
// The duplication in the bodies is necessary:
|
||||
// setting wasString and handled and deferring catchPanic
|
||||
// must happen before calling the method.
|
||||
switch v := p.field.(type) {
|
||||
case os.Error:
|
||||
wasString = false
|
||||
handled = true
|
||||
defer p.catchPanic(p.field, verb)
|
||||
p.printField(stringer.String(), verb, plus, false, depth)
|
||||
p.printField(v.String(), verb, plus, false, depth)
|
||||
return
|
||||
|
||||
case Stringer:
|
||||
wasString = false
|
||||
handled = true
|
||||
defer p.catchPanic(p.field, verb)
|
||||
p.printField(v.String(), verb, plus, false, depth)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user