Dalam aplikasi anda, anda menghadapi keperluan untuk melaksanakan kaedah Save() untuk dua model, ModelA dan ModelB. Walaupun berbeza, mereka berkongsi bidang yang sama, Guid. Biasanya, struct asas dicipta untuk memegang medan biasa dan dibenamkan ke dalam model individu. Walau bagaimanapun, pendekatan ini menimbulkan halangan untuk ORM seperti beego/orm.
Melaksanakan Kaedah Save() dengan Antara Muka
Satu penyelesaian yang berkesan ialah mentakrifkan antara muka, Boleh disimpan, dan melaksanakannya dalam kedua-dua ModelA dan ModelB. Ini membolehkan anda menggunakan jenis antara muka untuk memanggil kaedah Save(), tanpa mengira model tertentu yang digunakan. Berikut ialah contoh:
type Savable interface { Save() } func (a ModelA) Save() { // Save implementation for ModelA } func (b ModelB) Save() { // Save implementation for ModelB } // Example usage var i Savable i = SomeMethodThatRetunsMyModel() i.Save()
Membenamkan Struktur Bersama
Jika jenis terbenam lebih disukai, pendekatan alternatif boleh diambil. Buat struct biasa, ModelC, untuk memegang medan Panduan. Kemudian, benamkan ModelC ke dalam ModelA dan ModelB. Tentukan kaedah Save() dalam ModelC, dengan itu menyediakan kefungsian dikongsi merentas kedua-dua model.
type ModelC struct { Guid string `orm:"pk"` } func (c ModelC) Save() error { // Common Save implementation return nil } type ModelA struct { ModelC FiledA string } type ModelB struct { ModelC FiledB string }
Adalah penting untuk ambil perhatian bahawa pendekatan pembenaman ini tidak akan memasukkan sebarang medan dalam pernyataan sisipan ORM yang tidak ditakrifkan dalam ModelC. Oleh itu, rujukan langsung kepada kaedah ModelC mungkin diperlukan jika medan bukan lazim perlu dimanipulasi secara eksplisit.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menambah Kaedah Biasa dengan Cekap pada Struktur Go yang Berbeza Berkongsi Medan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!