Bagaimana untuk Lulus Kepingan Antara Muka Serasi dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-10-25 06:01:02
asal
507 orang telah melayarinya

How to Pass Slices of Compatible Interfaces in Go?

Melalui Kepingan Antara Muka Serasi dalam Go

Dalam Go, anda mungkin menghadapi kesukaran apabila menghantar hirisan satu antara muka ke fungsi yang mengharapkan hirisan antara muka yang berbeza, walaupun yang pertama termasuk yang kedua. Untuk menggambarkan isu ini, pertimbangkan dua antara muka, A dan B, di mana A termasuk B.

`
antara muka jenis A {

Close() error
Read(b []byte) (int, error)
Salin selepas log masuk

}

jenis B antara muka {

Read(b []byte) (int, error)
Salin selepas log masuk

}
`

Secara konkrit, struct Impl melaksanakan kedua-dua antara muka:

`
taip Impl struct {}
func (I Impl) Baca(b []bait) (int, ralat) {

return 10, nil
Salin selepas log masuk

}
func (I Impl) Tutup() ralat {

return nil
Salin selepas log masuk

}
`

Walaupun item individu boleh dialihkan merentasi fungsi tanpa masalah, penghantaran kepingan menghadapi ralat:

`
func single(r io.Reader) {

fmt.Println("in single")
Salin selepas log masuk

}
func slice(r []io.Reader) {

fmt.Println("in slice")
Salin selepas log masuk

}

impl := &Impl{}
single(impl) / / berfungsi

senarai := []A{impl}
slice(list) // GAGAL
`

Untuk menyelesaikan masalah ini, anda mesti mencipta kepingan baharu yang dijangkakan taip ([]io.Reader) dan isikannya dengan elemen daripada kepingan sumber ([]A):

`
newSlice := make([]io.Reader, len(list))
untuk i, v := senarai julat {

newSlice[i] = v
Salin selepas log masuk

}
slice(newSlice)
`

Pendekatan ini membolehkan anda menghantar kepingan satu antara muka kepada fungsi mengharapkan hirisan antara muka yang serasi yang lain, menyelesaikan ralat yang dibangkitkan apabila cuba meneruskan hirisan asal secara terus.

Atas ialah kandungan terperinci Bagaimana untuk Lulus Kepingan Antara Muka Serasi 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!