Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah saya boleh melaksanakan kaedah antara muka untuk jenis yang berbeza di Golang?

Bagaimanakah saya boleh melaksanakan kaedah antara muka untuk jenis yang berbeza di Golang?

DDD
Lepaskan: 2024-11-24 05:04:13
asal
568 orang telah melayarinya

How can I implement interface methods for dissimilar types in Golang?

Melaksanakan Kaedah Antara Muka dalam Jenis Tidak Serupa Menggunakan Antara Muka Golang

Dalam Go, selalunya diingini untuk mempunyai jenis struktur data yang berbeza melaksanakan antara muka yang sama untuk menyediakan satu set tingkah laku yang sama. Sebagai contoh, pertimbangkan dua struct:

type First struct {
    str string
}
type Second struct {
    str string
}
Salin selepas log masuk

Kami ingin kedua-dua struct melaksanakan antara muka A:

type A interface {
    PrintStr() // Print First.str or Second.str
}
Salin selepas log masuk

Walau bagaimanapun, melaksanakan PrintStr() untuk setiap struct secara berasingan nampaknya berlebihan:

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

func (s Second) PrintStr() {
    fmt.Print(s.str)
}
Salin selepas log masuk

Adalah ideal untuk mempunyai satu pelaksanaan untuk semua struct yang melaksanakan A. Percubaan untuk melakukan ini langsung tidak berfungsi:

func (a A) PrintStr() {
    fmt.Print(a.str)
}
Salin selepas log masuk

Sebabnya ialah a tidak mempunyai medan str. Sebaliknya, penyelesaian yang lebih elegan melibatkan mencipta jenis asas dan membenamkannya ke dalam dua struct kami:

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

Di sini, WithString berfungsi sebagai jenis asas, dan Pertama dan Kedua membenamkannya. Ini memberikan kita pelaksanaan terpusat untuk PrintStr().

Contoh penggunaan:

a := First{
    WithString: WithString{
        str: "foo",
    },
}
Salin selepas log masuk

Perhatikan bahawa kita boleh mencipta tika First dengan membenamkan tika WithString. Teknik ini membolehkan kami mencapai matlamat kami untuk mempunyai satu pelaksanaan untuk berbilang jenis berbeza yang melaksanakan antara muka yang sama.

Atas ialah kandungan terperinci Bagaimanakah saya boleh melaksanakan kaedah antara muka untuk jenis yang berbeza di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan