Akses Medan Jenis Struktur Terbenam
Apabila mentakrifkan jenis struct baharu, adalah mungkin untuk membenamkan struct lain sebagai medan. Ini boleh berguna untuk mencipta struktur data yang kompleks atau mewarisi fungsi. Walau bagaimanapun, mengakses medan struct terbenam kadangkala boleh menyebabkan ralat penyusunan disebabkan oleh pengendalian penuding.
Pertimbangkan kod berikut:
<code class="go">type Engine struct { power int } type Tires struct { number int } type Cars struct { *Engine Tires } func main() { car := new(Cars) car.number = 4 car.power = 342 fmt.Println(car) }</code>
Kod ini cuba membenamkan struct Enjin sebagai medan penunjuk ( *Enjin) dalam struct Kereta. Walaupun sintaks adalah betul, menyusun kod menghasilkan ralat berikut:
panic: runtime error: invalid memory address or nil pointer dereference [signal 0xb code=0x1 addr=0x0 pc=0x23bb]
Untuk menyelesaikan isu ini, adalah perlu untuk memulakan medan Enjin terbenam dengan betul. Ini boleh dicapai menggunakan penuding kepada struct terbenam:
<code class="go">func main() { car := new(Cars) car.Engine = new(Engine) // Initialize the Engine pointer car.power = 342 car.number = 4 fmt.Println(car) }</code>
Kini, kod berjaya menyusun dan mengakses medan terbenam "kuasa" tanpa menghadapi sebarang ralat.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Ralat Penyusunan Apabila Mengakses Medan Struktur Terbenam dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!