ホームページ > バックエンド開発 > Golang > ポインタアドレスなしでGolangで構造体のネストされたポインタ値を出力するにはどうすればよいですか?

ポインタアドレスなしでGolangで構造体のネストされたポインタ値を出力するにはどうすればよいですか?

DDD
リリース: 2024-12-07 17:04:11
オリジナル
312 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート