在下面的代码中,我希望fmt.Printf("%v\n", a)
调用其myTypeB类型成员的String(),但这不会发生?为什么?
package main
import "fmt"
type myTypeA struct {
b myTypeB
}
type myTypeB struct {
c string
d int
}
func (b myTypeB) String() string {
return "myTypeB custom"
}
func main() {
a:= myTypeA{myTypeB{"hello", 1}};
b:= myTypeB{"hello", 1}
fmt.Printf("%v\n", a)
fmt.Printf("%v\n", b)
}
答案 0 :(得分:2)
fmt
不会递归查找fmt.Stringer
。
如果参数是fmt.Stringer
,它将调用String()
方法,并打印结果。如果它没有String()
方法,fmt
将使用反射迭代字段以获取值。