Mengakses Medan Struktur Terbenam
Dalam Go, struct boleh mempunyai medan terbenam, yang membenarkan satu struct menggunakan semula medan daripada struct lain. Walau bagaimanapun, mengakses medan terbenam ini kadangkala boleh menyebabkan kekeliruan.
Pertimbangkan kod berikut:
<code class="go">type Engine struct { power int } type Tires struct { number int } type Cars struct { *Engine // embedded pointer-to-struct field Tires } func main() { car := new(Cars) car.number = 4 car.power = 342 fmt.Println(car) }</code>
Setelah disusun, anda mungkin mengalami ralat:
runtime error: invalid memory address or nil pointer dereference
Memahami Medan Terbenam
Untuk mengakses medan kuasa dalam struct Enjin terbenam, anda tidak boleh menggunakan car.power secara langsung. Medan terbenam diakses secara tidak langsung melalui penuding atau nilai perantaraan.
Penyelesaian
Satu cara untuk menyelesaikan ralat adalah dengan memberikan Enjin baharu kepada medan terbenam dalam Kereta struct:
<code class="go">package main import "fmt" type Engine struct { power int } type Tires struct { number int } type Cars struct { *Engine // embedded pointer-to-struct field Tires } func main() { car := new(Cars) car.Engine = new(Engine) car.power = 342 car.number = 4 fmt.Println(car) fmt.Println(car.Engine, car.power) fmt.Println(car.Tires, car.number) }</code>
Output
&{0x10328100 {4}} &{342} 342 {4} 4
Dalam kod yang diubah suai ini, kereta.Enjin kini menghala ke struct Enjin yang sah, membolehkan anda mengakses medan kuasa .
Nota: Anda juga boleh mengakses medan terbenam menggunakan refleksi atau teknik lanjutan lain, tetapi pendekatan di atas secara amnya adalah yang paling mudah.
Atas ialah kandungan terperinci Bagaimanakah Anda Mengakses Medan Struktur Terbenam dalam Go Apabila Ia Adalah Penunjuk?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!