如何在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中文網其他相關文章!