Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menambah Kefungsian Dikongsi dengan Cekap untuk Go Structs dengan Medan Berbeza?

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

Susan Sarandon
Susan Sarandonasal
2024-11-19 08:49:02806semak imbas

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
}

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!

Kenyataan:
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