Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Menambah Kaedah Biasa dengan Cekap pada Struktur Go yang Berbeza Berkongsi Medan?

Bagaimanakah Saya Boleh Menambah Kaedah Biasa dengan Cekap pada Struktur Go yang Berbeza Berkongsi Medan?

Barbara Streisand
Lepaskan: 2024-12-01 12:39:11
asal
255 orang telah melayarinya

How Can I Efficiently Add a Common Method to Different Go Structs Sharing a Field?

Menambah Kaedah kepada Struktur Berbeza dengan Medan Sepunya dalam Go

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

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

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!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan