Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Anda Mengakses Medan Struktur Terbenam dalam Go Apabila Ia Adalah Penunjuk?

Bagaimanakah Anda Mengakses Medan Struktur Terbenam dalam Go Apabila Ia Adalah Penunjuk?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-28 21:55:02329semak imbas

How Do You Access Embedded Struct Fields in Go When They Are Pointers?

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!

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