Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mengelakkan Pelaksanaan Kaedah Berlebihan Apabila Menggunakan Antara Muka Go?

Bagaimanakah Saya Boleh Mengelakkan Pelaksanaan Kaedah Berlebihan Apabila Menggunakan Antara Muka Go?

DDD
DDDasal
2024-11-13 04:28:02323semak imbas

How Can I Avoid Redundant Method Implementations When Using Go Interfaces?

Mengatasi Lebihan dalam Melaksanakan Kaedah untuk Pelbagai Jenis dengan Antara Muka Go

Dalam Go, antara muka menyediakan cara untuk menentukan tandatangan kaedah biasa yang boleh dilaksanakan oleh pelbagai jenis. Walaupun ini membenarkan polimorfisme dan penggunaan semula kod, ia boleh membawa kepada pelaksanaan berlebihan apabila berbilang jenis melaksanakan antara muka yang sama.

Pertimbangkan senario berikut: kami mempunyai dua struktur, Pertama dan Kedua, yang kedua-duanya perlu melaksanakan antara muka A dengan kaedah PrintStr(). Melaksanakan kaedah dalam setiap struct secara individu akan menjadi berlebihan.

type First struct {
    str string
}

type Second struct {
    str string
}

type A interface {
    PrintStr()
}

func (f First) PrintStr() {
    fmt.Print(f.str)
}

func (s Second) PrintStr() {
    fmt.Print(s.str)
}

Mengatasi Lebihan

Daripada menduplikasi pelaksanaan, kita boleh mencipta jenis asas yang merangkumi perkara biasa kefungsian. Jenis asas ini kemudiannya boleh dibenamkan ke dalam Pertama dan Kedua, membolehkan mereka menggunakan semula pelaksanaan tunggal.

type WithString struct {
    str string
}

type First struct {
    WithString
}

type Second struct {
    WithString
}

type A interface {
    PrintStr()
}

func (w WithString) PrintStr() {
    fmt.Print(w.str)
}

Pendekatan ini menghapuskan lebihan dan mengekalkan keselamatan jenis. Jenis asas WithString bertindak sebagai cara mudah untuk mengumpulkan kefungsian biasa, yang boleh digunakan semula oleh berbilang jenis.

Penggunaan

Untuk menggunakan kaedah PrintStr(), kami hanya buat contoh Pertama atau Kedua dan benamkan jenis WithString.

a := First{
    WithString: WithString{
        str: "foo",
    },
}

Kesimpulan

Dengan menggunakan jenis asas dan pembenaman, kami boleh menyelaraskan pelaksanaan kaedah untuk jenis yang berbeza yang melaksanakan antara muka yang sama. Pendekatan ini menggalakkan penggunaan semula kod, mengurangkan lebihan dan memastikan keselamatan jenis.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengelakkan Pelaksanaan Kaedah Berlebihan Apabila Menggunakan Antara Muka Go?. 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