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

Bolehkah struct tanpa nama mempunyai kaedah dalam Go?

王林
Lepaskan: 2024-02-08 20:54:03
ke hadapan
862 orang telah melayarinya

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

Isi soalan

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

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

Ini akan menghasilkan (cuba di Go Playground):

3
Salin selepas log masuk

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!

Label berkaitan:
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