Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengakses Medan Struktur Tanpa Nama yang Diluluskan sebagai Antara Muka Tanpa Kaedah di Golang?

Bagaimana untuk Mengakses Medan Struktur Tanpa Nama yang Diluluskan sebagai Antara Muka Tanpa Kaedah di Golang?

Linda Hamilton
Linda Hamiltonasal
2024-11-04 11:54:01873semak imbas

How to Access Fields of an Anonymous Struct Passed as an Interface with No Methods in Golang?

Antara Muka Tanpa Kaedah: Mengakses Jenis Tersuai di Golang

Dalam Golang, anda boleh mencipta struct tanpa nama dan menyerahkannya sebagai argumen kepada fungsi yang menerima jenis antara muka. Walau bagaimanapun, jika antara muka tidak mempunyai sebarang kaedah yang ditentukan, anda tidak akan dapat mengakses terus medan struct tanpa nama.

Pertimbangkan contoh kod berikut:

<code class="go">func NewJob(t string, name string, c func(), v interface{}) {
    // ...
}

func Custom(name string) interface{} {
    // ...
}

main() {
    gojob.NewJob("every 2 seconds", "pene", func() {
        t := gojob.Custom("pene")
        fmt.Println(t) // Prints "{1}"
        fmt.Println(t.Id) // Error: t.Id undefined (type interface {} is interface with no methods)
    }, struct {
        Id int
    }{
        1,
    })
}</code>

Dalam contoh ini, kami menghantar struct tanpa nama sebagai hujah v kepada NewJob. Fungsi Custom mendapatkan semula nilai tersuai yang dikaitkan dengan nama "pene" dan mengembalikannya sebagai antara muka{}.

Apabila kami cuba mengakses medan Id struct tanpa nama dalam goroutine, kami menghadapi ralat " t.Id tidak ditentukan". Ini kerana jenis antara muka{} tidak mempunyai kaedah yang ditentukan, jadi kami tidak boleh menganggapnya seperti jenis konkrit.

Untuk mengakses medan struct tanpa nama, kita perlu menaip menegaskannya kepada jenis yang serasi . Dalam kes ini, kita tahu bahawa v mengandungi struct tanpa nama dengan medan Id jenis int. Kita boleh menaip menegaskannya menggunakan sintaks berikut:

<code class="go">id := v.(struct{Id int}).Id</code>

Ini akan menukar antara muka{} nilai v menjadi struct konkrit dengan medan Id, membolehkan kami mengaksesnya secara terus.

Dengan menaip menegaskan nilai antara muka{}, kita boleh mengakses medan struct tanpa nama dan menggunakannya seperti yang diperlukan.

Atas ialah kandungan terperinci Bagaimana untuk Mengakses Medan Struktur Tanpa Nama yang Diluluskan sebagai Antara Muka Tanpa Kaedah di Golang?. 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