Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Melaksanakan Berbilang Antara Muka dengan Tanda Tangan Kaedah Yang Sama dalam Go?

Bagaimana untuk Melaksanakan Berbilang Antara Muka dengan Tanda Tangan Kaedah Yang Sama dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-11-02 22:12:30779semak imbas

How to Implement Multiple Interfaces with Identical Method Signatures in Go?

Melaksanakan Berbilang Antara Muka dengan Tanda Tangan Kaedah Yang Sama

Dalam Go, antara muka menawarkan keselamatan jenis dan menyokong pelbagai warisan. Walau bagaimanapun, apabila dua antara muka yang ditakrifkan dalam pakej berbeza berkongsi tandatangan kaedah yang sama, melaksanakan kedua-duanya dengan satu pelaksanaan boleh membawa kepada ketidakkonsistenan.

Untuk menangani perkara ini, bahasa pengaturcaraan Go menguatkuasakan ketekalan dalam jenis kaedah apabila melaksanakan antara muka. Ini memastikan kejelasan dan mengurangkan kemungkinan kekeliruan.

Dalam senario yang disediakan, anda ingin melaksanakan kedua-dua antara muka, A.Doer dan B.Doer, menggunakan kaedah C.Do yang sama. Walaupun C.Do memenuhi keperluan A.Doer, ia mungkin tidak mematuhi logik yang diharapkan oleh B.Doer.

Satu penyelesaian ialah menggunakan penegasan jenis. Dengan menyemak sama ada objek memenuhi kedua-dua A.Doer dan B.Doer, anda boleh menentukan pelaksanaan yang hendak digunakan.

<code class="go">if _, ok := obj.(A.Doer); ok {
    // Use A.Doer implementation
}
if _, ok := obj.(B.Doer); ok {
    // Use B.Doer implementation
}</code>

Namun, jika logik untuk A.Do dan B.Do berbeza dengan ketara, lebih pendekatan yang mantap ialah mencipta pembungkus berasingan untuk objek.

Buat dua jenis baharu, DoerA dan DoerB, setiap satu mengandungi objek C dan melaksanakan sama ada A.Doer atau B.Doer masing-masing. Dengan menghantar pembungkus yang sesuai kepada fungsi yang sepadan, anda boleh memastikan bahawa logik yang dijangkakan dilaksanakan.

<code class="go">type DoerA struct {
    C C
}

// Implement A.Do() using C.Do()
func (d DoerA) Do() string {
    return "C now implements A as per its logic"
}

type DoerB struct {
    C C
}

// Implement B.Do() using C.Do()
func (d DoerB) Do() string {
    return "C now implements B as per its logic"
}

func main() {
    c := C(0)
    dA := DoerA{C: c}
    dB := DoerB{C: c}
    A.FuncA(dA)
    B.FuncB(dB)
}</code>

Dengan menggunakan pembungkus yang berasingan, anda boleh menguatkuasakan pelaksanaan yang betul untuk setiap kaedah antara muka sambil masih menggunakan asas C objek.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Berbilang Antara Muka dengan Tanda Tangan Kaedah Yang Sama dalam 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