Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Antara Muka dalam Go Boleh Digunakan untuk Melaksanakan Kaedah bagi Pelbagai Jenis Tanpa Penduaan Kod?

Bagaimanakah Antara Muka dalam Go Boleh Digunakan untuk Melaksanakan Kaedah bagi Pelbagai Jenis Tanpa Penduaan Kod?

DDD
DDDasal
2024-11-15 06:35:02959semak imbas

How Can Interfaces in Go Be Used to Implement Methods for Different Types Without Code Duplication?

Melaksanakan Kaedah untuk Pelbagai Jenis Menggunakan Antara Muka dalam Go

Dalam Go, antara muka menyediakan mekanisme untuk menentukan set kaedah yang pelbagai jenis boleh melaksanakan. Ini membenarkan tingkah laku polimorfik, di mana jenis yang berbeza boleh berkongsi set operasi biasa.

Pernyataan Masalah

Andaikan kita mempunyai dua struct, Pertama dan Kedua, yang kita mahu untuk melaksanakan antara muka, A, yang mentakrifkan kaedah yang dipanggil PrintStr(). Setiap struct mempunyai medan rentetan bernama str. Walau bagaimanapun, jika kita melaksanakan kaedah PrintStr() secara berasingan untuk kedua-dua struct, ia menjadi berlebihan.

Cadangan Penyelesaian

Seseorang mungkin berpendapat adalah mungkin untuk mempunyai satu pelaksanaan PrintStr() untuk kedua-dua struct dengan mentakrifkannya pada antara muka A itu sendiri. Walau bagaimanapun, pendekatan ini tidak berfungsi kerana antara muka tidak membawa sebarang data.

Membenamkan dan Melaksanakan

Daripada pelaksanaan tunggal pada antara muka, kami boleh mencipta jenis asas, WithString, dan benamkannya ke dalam Pertama dan Kedua. Jenis WithString akan mempunyai medan str dan melaksanakan kaedah PrintStr(). Dengan membenamkan WithString, First dan Second secara tidak langsung memperoleh medan str dan pelaksanaan PrintStr(). Ini membolehkan mereka melaksanakan antara muka A dengan penduaan minimum.

Kod Contoh

type WithString struct {
    str string
}

type First struct {
    WithString
}

type Second struct {
    WithString
}

type A interface {
    PrintStr() //print First.str or Second.str
}

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

Penggunaan

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

Pendekatan ini membolehkan kami melaksanakan kaedah biasa untuk jenis yang berbeza sambil mengelakkan pertindihan kod.

Atas ialah kandungan terperinci Bagaimanakah Antara Muka dalam Go Boleh Digunakan untuk Melaksanakan Kaedah bagi Pelbagai Jenis Tanpa Penduaan Kod?. 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