我一直在阅读有关Go语言的教程,但我无法弄清楚为什么会出现这种情况。
当你拥有一个Stringer(String() string)时,fmt将使用该方法来打印到控制台。就像https://tour.golang.org/methods/6中所建议的那样。
但是,如果添加Error() string,则会调用该方法而不是String() string。
当你拥有一个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
。