Bagaimana untuk Melaksanakan Kaedah Antara Muka dengan Jenis Pulangan Antara Muka dalam Go?

Susan Sarandon
Lepaskan: 2024-11-09 15:12:02
asal
533 orang telah melayarinya

How to Implement Interface Methods with Interface Return Types in Go?

Melaksanakan Kaedah Antara Muka dengan Jenis Pulangan Antara Muka dalam Go

Dalam Go, seseorang mungkin menghadapi situasi di mana kaedah antara muka mempunyai antara muka sebagai jenis pulangan. Ini menimbulkan persoalan bagaimana untuk melaksanakan kaedah sedemikian.

Pertimbangkan contoh kod yang disediakan:

type IA interface {
    FB() IB
}

type IB interface {
    Bar() string
}

type A struct {
    b *B
}

func (a *A) FB() *B {
    return a.b
}

type B struct{}

func (b *B) Bar() string {
    return "Bar!"
}
Salin selepas log masuk

Apabila cuba menyusun kod ini, ralat berlaku kerana kaedah FB struct A kembali a *B jenis konkrit dan bukannya jenis antara muka IB yang diperlukan.

Untuk menyelesaikan isu ini, cuma ubah suai kaedah FB dalam A struct untuk mengembalikan jenis antara muka IB:

func (a *A) FB() IB {
    return a.b
}
Salin selepas log masuk

Kini, struct A melaksanakan antara muka IA dengan betul dan boleh digunakan sebagai jenis IA.

Dalam kes di mana antara muka ditakrifkan dalam pakej yang berbeza, masih mungkin untuk melaksanakan kaedah dengan sewajarnya. Sebagai contoh, jika IA dan IB ditakrifkan dalam pakej foo dan pelaksanaan berada dalam bar pakej, pengisytiharan dan pelaksanaan adalah seperti berikut:

Pengisytiharan (dalam pakej foo):

type IA interface {
    FB() IB
}
Salin selepas log masuk

Pelaksanaan (dalam bar pakej):

func (a *A) FB() foo.IB {
    return a.b
}
Salin selepas log masuk

Dengan menghantar nilai yang dikembalikan kepada jenis antara muka yang diperlukan, pelaksanaan boleh mematuhi antara muka yang diperlukan dan berjaya menyusun.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Kaedah Antara Muka dengan Jenis Pulangan Antara Muka dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan