Bagaimana untuk Mengakses Medan Terbenam dalam Go Structs Apabila Menggunakan Penunjuk?

Mary-Kate Olsen
Lepaskan: 2024-11-01 14:17:02
asal
309 orang telah melayarinya

How to Access Embedded Fields in Go Structs When Using Pointers?

Akses Medan Terbenam Jenis Struktur

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

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

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

Kini, kod akan disusun dan dijalankan dengan jayanya, menghasilkan output berikut:

&{0x10328100 {4}}
&{342} 342
{4} 4
Salin selepas log masuk

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!