Dalam Go, struct boleh membenamkan jenis struct lain. Walau bagaimanapun, mengakses medan terbenam kadangkala boleh menjadi cabaran untuk pemula. Pertimbangkan coretan kod berikut:
<code class="go">type Engine struct { power int } type Tires struct { number int } type Cars struct { *Engine Tires }</code>
Di sini, struct Cars membenamkan *jenis penuding Enjin. Percubaan untuk menyusun kod menghasilkan ralat berikut:
<code class="go">panic: runtime error: invalid memory address or nil pointer dereference [signal 0xb code=0x1 addr=0x0 pc=0x23bb]</code>
Ralat ini berlaku kerana medan Enjin dalam struct Kereta ialah penunjuk dan dimulakan sebagai sifar. Untuk mengakses medan kuasa Enjin terbenam, kita perlu memulakan medan Enjin secara eksplisit:
<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>
Kini, kod akan disusun dan dijalankan dengan jayanya, menghasilkan output berikut:
&{0x10328100 {4}} &{342} 342 {4} 4
Seperti yang anda boleh lihat, kami dapat mengakses medan kuasa struct Enjin terbenam dengan memulakan secara eksplisit medan Enjin dalam struct Kereta. Ini adalah amalan biasa dalam Go apabila bekerja dengan struct terbenam.
Atas ialah kandungan terperinci Bagaimana untuk Mengakses Medan Terbenam dalam Go Structs Apabila Menggunakan Penunjuk?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!