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

Linda Hamilton
Lepaskan: 2024-10-27 10:28:30
asal
340 orang telah melayarinya

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>
Salin selepas log masuk

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]
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan