Rumah >pembangunan bahagian belakang >Golang >Bolehkah struct tanpa nama mempunyai kaedah dalam Go?

Bolehkah struct tanpa nama mempunyai kaedah dalam Go?

王林
王林ke hadapan
2024-02-08 20:54:03857semak imbas

Go 中匿名结构体可以有方法吗?

Isi soalan

var anonymousStruct = &struct {
    Value int
    Test  func()
}{
    Test: func() {
        fmt.Println(anonymousStruct.Value)
    },
}

Melihat kod, saya menghadapi masalah pada baris 6: fungsi "Ujian" tidak boleh mengakses parameter "Nilai". Adakah terdapat cara untuk memberikan akses fungsi kepada "Nilai" tanpa menghantarnya sebagai parameter sekali lagi, serupa dengan "anonymousStruct.Test(anonymousStruct.Value)"? Dengan kata lain, bolehkah struct tanpa nama dalam Go mempunyai kaedah dan bukannya fungsi? Terima kasih atas tunjuk ajar anda.


Jawapan betul


Anda tidak boleh mengisytiharkan kaedah sebagai struct tanpa nama kerana pengisytiharan kaedah hanya boleh mengandungi jenis bernama (sebagai penerima).

Selain itu, struct tanpa nama boleh mempunyai kaedah jika ia dibenamkan dalam jenis yang mempunyai kaedah (ia akan dinaikkan pangkat).

Dalam contoh anda, anda tidak boleh merujuk pembolehubah dalam literal kompaunanonymousStruct kerana pembolehubah hanya dalam skop selepas ia diisytiharkan (selepas literal kompaun). Lihat Spesifikasi: Pengisytiharan dan Skop Contoh: Mentakrifkan fungsi rekursif di dalam fungsi Jom .

Sebagai contoh, anda boleh memulakan medan fungsi selepas pengisytiharan berubah:

var anonymousStruct = &struct {
    Value int
    Test  func()
}{Value: 3}

anonymousStruct.Test = func() {
    fmt.Println(anonymousStruct.Value)
}

anonymousStruct.Test()

Ini akan menghasilkan (cuba di Go Playground):

3

Atas ialah kandungan terperinci Bolehkah struct tanpa nama mempunyai kaedah dalam Go?. 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