Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk mengakses medan struktur bersarang dalam pelbagai jenis antara muka

Bagaimana untuk mengakses medan struktur bersarang dalam pelbagai jenis antara muka

WBOY
WBOYke hadapan
2024-02-14 09:00:11782semak imbas

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

}

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")
}

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())
}

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam