首頁 >後端開發 >Golang >如何在沒有指標位址的情況下在 Golang 中列印結構體的巢狀指標值?

如何在沒有指標位址的情況下在 Golang 中列印結構體的巢狀指標值?

DDD
DDD原創
2024-12-07 17:04:11309瀏覽

How to Print a Struct's Nested Pointer Value in Golang Without the Pointer Address?

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn