Bagaimana untuk mengakses medan struktur bersarang dalam pelbagai jenis antara muka

WBOY
Lepaskan: 2024-02-14 09:00:11
ke hadapan
758 orang telah melayarinya

Bagaimana untuk mengakses medan struktur bersarang dalam pelbagai jenis antara muka

Editor PHP Youzi akan menerangkan kepada anda cara mengakses medan struktur bersarang dalam tatasusunan jenis antara muka. Apabila memproses data yang dikembalikan oleh antara muka, kadangkala anda akan menemui struktur bersarang, iaitu tatasusunan mengandungi medan yang lebih dalam. Untuk mengakses medan bersarang ini, kita boleh menggunakan operator titik atau subskrip tatasusunan untuk mendapatkannya lapisan demi lapisan. Dengan memahami struktur hierarki tatasusunan dan nama kunci yang sepadan, kami boleh mengakses nilai medan yang diperlukan dengan mudah dan mencapai pemprosesan fleksibel data yang dikembalikan oleh antara muka. Seterusnya, kami akan memperkenalkan secara terperinci cara mengendalikan medan struktur bersarang dalam tatasusunan jenis antara muka, membolehkan anda menangani pelbagai senario pemprosesan data dengan mudah.

Kandungan soalan

Saya mahu mengakses medan FieldBase dalam struktur bersarang ini.

Ini adalah contoh kod saya:

type InterfaceA interface {
    FunA()
}

type BaseStruct struct {
    FieldBase string
}

type SubStruct struct {
    BaseStruct
}

func (c SubStruct) FunA() {
}

type SubStruct2 struct {
    BaseStruct
}

func (c SubStruct2) FunA() {
}

func main() {
    var x = [2]InterfaceA{
        SubStruct{BaseStruct: BaseStruct{FieldBase: "aaa"}},
        SubStruct2{BaseStruct: BaseStruct{FieldBase: "bbb"}},
    }

    // TODO: Access fields of nested classes in the array

}
Salin selepas log masuk

Saya ingin tahu cara mengakses nilai medan FieldBase bagi setiap struktur bersarang dalam tatasusunan x, dengan x ialah jenis antara muka. Saya cuba menggunakan penegasan jenis untuk akses, tetapi saya hanya boleh mencubanya pada satu elemen.

if subStruct, ok := x[1].(SubStruct); ok {
    fmt.Println(subStruct.FieldBase)
} else {
    fmt.Println("Cannot access FieldBase")
}
Salin selepas log masuk

Penyelesaian

Memandangkan tatasusunan anda tergolong dalam antara muka, anda sama ada memerlukan penegasan dan pengendalian jenis untuk setiap jenis, atau kaedah antara muka. Walau bagaimanapun, saya fikir apa yang anda mahu dan perlukan ialah mempunyai kaedah antara muka untuk setiap jenis struct yang mendedahkan FieldBase , seperti ini:

package main

import "fmt"

type InterfaceA interface {
    FunA()
    GetFieldBase() string
}

type BaseStruct struct {
    FieldBase string
}

type SubStruct struct {
    BaseStruct
}

func (c SubStruct) FunA() {
}

func (c SubStruct) GetFieldBase() string {
    return c.FieldBase
}

type SubStruct2 struct {
    BaseStruct
}

func (c SubStruct2) FunA() {
}

func (c SubStruct2) GetFieldBase() string {
    return c.FieldBase
}

func main() {
    var x = [2]InterfaceA{
        SubStruct{BaseStruct: BaseStruct{FieldBase: "aaa"}},
        SubStruct2{BaseStruct: BaseStruct{FieldBase: "bbb"}},
    }

    // TODO: Access fields of nested classes in the array

    fmt.Println(x[0].GetFieldBase())
    fmt.Println(x[1].GetFieldBase())
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk mengakses medan struktur bersarang dalam pelbagai jenis antara muka. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan