Latar Belakang:
Selepas penyelidikan dan ujian yang meluas, penulis percaya bahawa kaedah terbenam dalam Go tidak boleh mengakses medan "ibu bapa". Soalan ini meneroka sama ada terdapat sebarang pengecualian atau pendekatan alternatif yang diketahui.
Matlamat:
Objektifnya ialah untuk mencipta gaya Rekod Aktif ORM untuk Go, di mana operasi CRUD akan dibenamkan dalam struct pengguna. Ini akan memberikan peningkatan kebolehbacaan dan pengabstrakan daripada stor data hujung belakang.
Contoh:
Coretan kod Go yang disediakan cuba mengakses medan "Nama" bagi " Foo" struct daripada kaedah "Ujian" struct "Bar" terbenam. Walau bagaimanapun, ini mengakibatkan ralat penyusunan.
Soalan:
Adakah terdapat sebarang mekanisme dalam Go yang membenarkan kaedah terbenam untuk mengakses medan struct yang disertakan?
Jawapan:
Go tidak menyokong akses terus ke medan induk dalam kaedah terbenam. Jenis penerima kaedah "Ujian" ialah penuding "Bar", dan tiada cara untuk kaedah menentukan sama ada penuding ini dibenamkan atau berdiri sendiri.
Penyelesaian Kemungkinan:
Satu penyelesaian melibatkan penambahan antara muka{} ahli pada struct "Bar" dan memerlukan jenis yang mengandungi diberikan kepada ini ahli. Walau bagaimanapun, ini bukan penyelesaian yang elegan dan memperkenalkan kerumitan tambahan.
Pendekatan Alternatif:
Daripada membenamkan kaedah, penulis mencadangkan menggunakan struktur API yang berbeza, seperti "db.Save(user)" dan bukannya "user.Save()". Pendekatan ini membolehkan sambungan lebih mudah kepada berbilang pangkalan data dan mengurangkan pergantungan pada keadaan global.
Atas ialah kandungan terperinci Bolehkah Kaedah Go Terbenam Mengakses Medan Struktur Terlampir?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!