如何在 Golang 中使用指针打印结构体值
考虑以下代码片段:
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 ==== %+v \n", a) // output: v ==== &{a:1 B:0xc42000e204} }
这里,您想要打印 B 的值而不使用其指针表示形式。为了实现这一目标,有几个选项:
1。实现 Stringer 接口:
fmt.Printf() 函数调用 String() 方法(如果要打印的类型存在该方法)。为 A 和 B 结构实现 String() 方法:
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) }
通过此实现,输出将为:
v ==== A{a:1, B:B{b:2}}
2。自定义打印格式:
您可以直接格式化输出字符串以仅包含所需的字段:
fmt.Printf("v ==== A{a:%d, B:B{b:%d}}\n", a.a, a.B.b)
输出:
v ==== A{a:1, B:B{b:2}}
3.引用结构体中的值:
由于 B 是 A 中的字段,因此可以直接引用其值:
fmt.Printf("v ==== A{a:%d, B:%v}", a.a, a.B)
输出:
v ==== A{a:1, B:&{b:2}}
以上是如何在没有指针地址的情况下在 Golang 中打印结构体的嵌套指针值?的详细内容。更多信息请关注PHP中文网其他相关文章!