Go,%v格式为嵌套结构调用String()

时间:2014-09-24 15:23:20

标签: go

在下面的代码中,我希望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)
}

Playground link

1 个答案:

答案 0 :(得分:2)

fmt不会递归查找fmt.Stringer

如果参数是fmt.Stringer,它将调用String()方法,并打印结果。如果它没有String()方法,fmt将使用反射迭代字段以获取值。