ホームページ  >  記事  >  バックエンド開発  >  ポインタを使用するときに Go 構造体の埋め込みフィールドにアクセスするにはどうすればよいですか?

ポインタを使用するときに Go 構造体の埋め込みフィールドにアクセスするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-01 14:17:02313ブラウズ

How to Access Embedded Fields in Go Structs When Using Pointers?

構造体型の埋め込みフィールド アクセス

Go では、構造体に他の構造体型を埋め込むことができます。ただし、初心者にとって、埋め込みフィールドへのアクセスは難しい場合があります。次のコード スニペットを考えてみましょう:

<code class="go">type Engine struct {
    power int
}

type Tires struct {
    number int
}

type Cars struct {
    *Engine
    Tires
}</code>

ここでは、Cars 構造体に *Engine ポインター タイプが埋め込まれています。コードをコンパイルしようとすると、次のエラーが発生します:

<code class="go">panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x0 pc=0x23bb]</code>

このエラーは、Cars 構造体の Engine フィールドがポインターであり、nil として初期化されているために発生します。埋め込みエンジンのパワー フィールドにアクセスするには、エンジン フィールドを明示的に初期化する必要があります:

<code class="go">package main

import "fmt"

type Engine struct {
    power int
}

type Tires struct {
    number int
}

type Cars struct {
    *Engine
    Tires
}

func main() {
    car := new(Cars)
    car.Engine = new(Engine) // Initialize the Engine field
    car.power = 342
    car.number = 4
    fmt.Println(car)
    fmt.Println(car.Engine, car.power)
    fmt.Println(car.Tires, car.number)
}</code>

これで、コードは正常にコンパイルされて実行され、次の出力が生成されます:

&{0x10328100 {4}}
&{342} 342
{4} 4

ご覧のとおり、Cars 構造体の Engine フィールドを明示的に初期化することで、埋め込まれた Engine 構造体の power フィールドにアクセスできました。これは、Go で埋め込み構造体を操作するときによく行われる方法です。

以上がポインタを使用するときに Go 構造体の埋め込みフィールドにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。