Rumah >pembangunan bahagian belakang >Golang >Bolehkah struct tanpa nama mempunyai kaedah dalam Go?
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.
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!