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

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

Patricia Arquette
リリース: 2024-11-29 16:44:10
オリジナル
267 人が閲覧しました

How to Print the Value, Not the Pointer, of Nested Structs in Go?

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

Go では、ポインターを含む構造体の値を出力する場合、通常は代わりにポインター アドレスが出力されます。実際の値の。これは、ネストされた構造体の内容を検査しようとするときに問題になる可能性があります。

ポインタの代わりに B 構造体の値を出力する方法

この問題を解決するには、次のようにします。 2 つのオプションがあります:

  1. ストリンガーを実装するインターフェイス:

    A 構造体と B 構造体に String() メソッドを実装します。このメソッドは、構造体のフォーマットされた文字列表現を返します。実装では、ポインターの代わりに目的の値を出力します。

    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}}
        fmt.Println(a)
    }
    ログイン後にコピー
  2. 値を手動で出力:

    実際の値にアクセスします。手動で構造化し、直接出力します。

    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("A{a:%d, B:{b:%d}}\n", a.a, a.B.b)
    }
    ログイン後にコピー

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

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