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

Goでポインタを使用してネストされた構造体の値を出力するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-29 21:24:11
オリジナル
212 人が閲覧しました

How to Print the Values of Nested Structs with Pointers in Go?

Go でポインターを含む構造体の値を出力する

Go では、構造体の値を出力する必要がある状況がよく発生します。他の構造体へのポインタが含まれます。ただし、fmt.Printf() の %v 形式指定子のデフォルトの動作では、実際の値の代わりにポインター アドレスが表示されます。

次の例を考えてみましょう。

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)
}
ログイン後にコピー

の出力上記のコードは次のとおりです:

v ==== &{a:1 B:0xc42000e204}
ログイン後にコピー

ご覧のとおり、B フィールドは B 構造体のメモリ アドレスとして出力されます。実際の値。

Stringer インターフェイスを使用したカスタム印刷

ネストされた構造体の内容を印刷する 1 つの方法は、A 型と B 型の両方に Stringer インターフェイスを実装することです。 Stringer インターフェイスには、値の文字列表現を返す String() という 1 つのメソッドが必要です。

Stringer インターフェイスを使用した更新された例を次に示します。

package main

import "fmt"

type A struct {
    a int32
    B *B
}

type B struct{ b int32 }

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)
}

func main() {
    a := &A{a: 1, B: &B{b: 2}}

    // using the Stringer interface
    fmt.Printf("v ==== %v \n", a)

    // or just print it yourself however you want.
    fmt.Printf("v ==== A{a:%d, B:B{b:%d}}\n", a.a, a.B.b)

    // or just reference the values in the struct that are structs themselves
    // but this can get really deep
    fmt.Printf("v ==== A{a:%d, B:%v}", a.a, a.B)
}
ログイン後にコピー

現在の出力は次のようになります。 :

v ==== A{a:1, B:B{b:2}}
ログイン後にコピー

マニュアル印刷

Stringer インターフェイスを実装したくない場合は、print ステートメントを使用して構造体の必要な表現を手動で印刷できます。たとえば、ネストされた構造体のフィールドにアクセスして、それらを個別に出力できます。

fmt.Printf("v ==== A{a:%d, B:B{b:%d}}\n", a.a, a.B.b)
ログイン後にコピー

このアプローチにより、出力の形式を完全に制御できます。

以上がGoでポインタを使用してネストされた構造体の値を出力するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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