我一直在浏览巡演,我无法弄清楚为什么会这样.
当你有一个Stringer
(String() string
)时,fmt
将使用该方法打印到控制台.如https://tour.golang.org/methods/6中所述
但是,如果添加Error() string
,则调用此方法而不是String() string
.
package main
import "fmt"
type Person struct {
Name string
Age int
}
func (p *Person) String() string {
return fmt.Sprintf("%v (%v years)", p.Name, p.Age)
}
func (p *Person) Error() string {
return fmt.Sprintf("Failed")
}
func main() {
a := &Person{"Arthur Dent", 42}
z := &Person{"Zaphod Beeblebrox", 9001}
fmt.Println(a, z)
}
Run Code Online (Sandbox Code Playgroud)
结果:
失败失败
我不明白为什么fmt.Println
用Error
而不是String
.