自定义带有指针的结构体的打印输出
在 Go 中打印带有指针的结构体时,使用默认的 %v 格式说明符可能无法提供想要的结果。这是因为它打印指针地址而不是引用的结构体的内容。
要解决这个问题,有两种主要方法:为结构体类型定义自定义 String 方法或手动格式化输出。
定义自定义字符串方法
首选方法是为所涉及的结构实现 Stringer 接口类型。这可以通过向结构添加 String() 字符串方法来完成。传递给 printf 函数的格式字符串将调用此方法。
例如:
package main import "fmt" type A struct { a int32 B *B } type B struct{ b int32 } func (aa *A) String() string { return fmt.Sprintf("A{a:%d, B:%v}",aa.a,aa.B) } func (bb *B) String() string { return fmt.Sprintf("B{b:%d}",bb.b) } func main() { a := &A{a: 1, B: &B{b: 2}} fmt.Printf("v ==== %v \n", a) // Prints "v ==== A{a:1, B:B{b:2}}" }
手动格式化
在没有String 方法,您可以使用各个结构成员的格式说明符手动格式化输出。
package main import "fmt" type A struct { a int32 B *B } type B struct{ b int32 } func main() { a := &A{a: 1, B: &B{b: 2}} fmt.Printf("v ==== A{a:%d, B:B{b:%d}}\n", a.a, a.B.b) }
以上是如何为带有指针的结构定制 Go 的打印输出?的详细内容。更多信息请关注PHP中文网其他相关文章!