【发布时间】:2015-05-11 05:05:05
【问题描述】:
我一直在寻找 go 的导览,但我无法弄清楚为什么会发生这种情况。
当您有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)
}
结果:
失败失败
我不明白为什么fmt.Println 使用Error 而不是String。
【问题讨论】: