Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengakses Medan Terbenam dalam Go Structs Apabila Menggunakan Penunjuk?

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

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-01 14:17:02402semak imbas

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>

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>

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>

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

&{0x10328100 {4}}
&{342} 342
{4} 4

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!

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