Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Menambah Kefungsian Dikongsi dengan Cekap untuk Go Structs dengan Medan Berbeza?
Cara Menambah Fungsi Dikongsi pada Struktur Go Dibezakan
Dalam Go, anda mungkin menghadapi keperluan untuk menambah kaedah biasa pada struct yang berkongsi medan tertentu, seperti medan Panduan dalam contoh berikut:
type ModelA struct { Guid string `orm:"pk"` FiledA string } type ModelB struct { Guid string `orm:"pk"` FiledB string }
Secara tradisinya, seseorang mungkin mempertimbangkan untuk menggunakan struct asas dan membenamkannya ke dalam ModelA dan ModelB. Walau bagaimanapun, pendekatan ini mungkin tidak berfungsi dengan lancar dengan perpustakaan orm.
Penyelesaian yang berdaya maju melibatkan penggunaan antara muka. Dengan mentakrifkan antara muka, anda boleh mengisytiharkan kontrak bersama yang ModelA dan ModelB mesti laksanakan:
type Savable interface { Save() }
Seterusnya, laksanakan kaedah Save() untuk kedua-dua struct:
func (a ModelA) Save() { // Implementation for ModelA } func (b ModelB) Save() { // Implementation for ModelB }
Sekarang , anda boleh mencipta pembolehubah jenis Savable dan menetapkannya kepada ModelA atau ModelB:
var i Savable i = ModelA{} i.Save()
Sebagai alternatif, anda boleh menggunakan pendekatan jenis terbenam:
type ModelC struct { Guid string `orm:"pk"` } type ModelA struct { ModelC FiledA string } type ModelB struct { ModelC FiledB string }
Dalam kes ini, tentukan kaedah Save() dalam struktur ModelC terbenam:
func (c ModelC) Save() { // Implementation }
Walaupun pendekatan ini nampak mudah, adalah penting untuk ambil perhatian bahawa pernyataan o.Insert(this) hanya akan memasukkan medan yang ditakrifkan pada ModelC, bukan yang pada ModelA dan ModelB.
Oleh itu, adalah disyorkan untuk mengelak daripada menggunakan pembenaman apabila anda masih perlu merujuk jenis terbenam secara eksplisit. Dalam kes sedemikian, pendekatan antara muka memberikan fleksibiliti yang lebih besar.
Atas ialah kandungan terperinci Bagaimana untuk Menambah Kefungsian Dikongsi dengan Cekap untuk Go Structs dengan Medan Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!