请原谅我的速度慢,但我不明白何时调用Interface方法.我在Go Tour中看到这个例子:
@H_502_14@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 main() { a := Person{"Arthur Dent",42} z := Person{"Zaphod Beeblebrox",9001} fmt.Println(a,z) }
我知道func(p Person)接收String()方法并返回我想要显示的字符串.
但是在某个地方,main()中的fmt.Println必须以某种方式调用String(),对吧?
我看了一下godoc fmt的来源,但我还是想不出来!
例如,如果我添加自己的接口,让我们说Stringer2使用方法String2()并创建一个func(p Person)String2(){….},那么String()如何被fmt.Println执行,但不是String2()?
我知道,我很困惑自己!