Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Lulus Kepingan Antara Muka Serasi dalam 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)
}
jenis B antara muka {
Read(b []byte) (int, error)
}
`
Secara konkrit, struct Impl melaksanakan kedua-dua antara muka:
`
taip Impl struct {}
func (I Impl) Baca(b []bait) (int, ralat) {
return 10, nil
}
func (I Impl) Tutup() ralat {
return nil
}
`
Walaupun item individu boleh dialihkan merentasi fungsi tanpa masalah, penghantaran kepingan menghadapi ralat:
`
func single(r io.Reader) {
fmt.Println("in single")
}
func slice(r []io.Reader) {
fmt.Println("in slice")
}
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
}
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!