Bagaimana untuk Menambah Kefungsian Dikongsi dengan Cekap untuk Go Structs dengan Medan Berbeza?

Susan Sarandon
Lepaskan: 2024-11-19 08:49:02
asal
806 orang telah melayarinya

How to Efficiently Add Shared Functionality to Go Structs with Different Fields?

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

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

Seterusnya, laksanakan kaedah Save() untuk kedua-dua struct:

func (a ModelA) Save() {
    // Implementation for ModelA
}

func (b ModelB) Save() {
    // Implementation for ModelB
}
Salin selepas log masuk

Sekarang , anda boleh mencipta pembolehubah jenis Savable dan menetapkannya kepada ModelA atau ModelB:

var i Savable
i = ModelA{}
i.Save()
Salin selepas log masuk

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

Dalam kes ini, tentukan kaedah Save() dalam struktur ModelC terbenam:

func (c ModelC) Save() {
    // Implementation
}
Salin selepas log masuk

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!

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