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

标签 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

最佳答案

fmt 不会递归地查找 fmt.Stringer

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

关于Go,%v 格式为嵌套结构调用 String(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26020726/

相关文章:

go - 如何使用 grpc 方法处理程序解决此问题

go - 如何在 Go playground 中定义不同的文件或包?

mongodb - MongoLab 通过 CURL/Golang-http 使用 HTTP PUT 删除多个集合不起作用

go - 存储 Go 编码数据的通用函数

go - 如何使用通用结构

go - 试图理解 goroutines

go - 连接器 : Error connecting to a physical device

go - 如何返回空白 rune

reflection - 无需编译即可检查变量实现接口(interface)

Go:表示没有查询字符串的路径