Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengelakkan Ralat Penyusunan Apabila Mengakses Medan Struktur Terbenam dalam Go?

Bagaimana untuk Mengelakkan Ralat Penyusunan Apabila Mengakses Medan Struktur Terbenam dalam Go?

Linda Hamilton
Linda Hamiltonasal
2024-10-27 10:28:30256semak imbas

How to Avoid Compilation Errors When Accessing Embedded Struct Fields in Go?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn