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 中国語 Web サイトの他の関連記事を参照してください。