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