Rumah > pembangunan bahagian belakang > Golang > 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
Lepaskan: 2024-10-28 21:55:02
asal
421 orang telah melayarinya

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

Setelah disusun, anda mungkin mengalami ralat:

runtime error: invalid memory address or nil pointer dereference
Salin selepas log masuk

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

Output

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

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!

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