Übergabe von Slices kompatibler Schnittstellen in Go
In Go kann es zu Schwierigkeiten kommen, wenn Slices einer Schnittstelle an Funktionen übergeben werden, die Slices von a erwarten andere Schnittstelle, auch wenn erstere letztere beinhaltet. Um dieses Problem zu veranschaulichen, betrachten Sie zwei Schnittstellen, A und B, wobei A B einschließt.
`
Typ-A-Schnittstelle {
Close() error Read(b []byte) (int, error)
}
Typ B Schnittstelle {
Read(b []byte) (int, error)
}
`
Konkret implementiert die Impl-Struktur beide Schnittstellen:
`
Typ Impl-Struktur {}
func (I Impl) Read(b []byte) (int, error) {
return 10, nil
}
func (I Impl) Close() error {
return nil
}
`
Während einzelne Elemente problemlos über Funktionen übergeben werden können, tritt bei der Übergabe von Slices ein Fehler auf:
`
func single(r io.Reader) {
list := []A{impl}
slice(list) // FAILS
fmt.Println("in slice")
Um dieses Problem zu beheben, müssen Sie ein neues Slice des erwarteten erstellen Geben Sie ([]io.Reader) ein und füllen Sie es mit Elementen aus dem Quell-Slice ([]A):
`
newSlice := make([]io.Reader, len(list))
}
`
Mit diesem Ansatz können Sie Slices einer Schnittstelle an Funktionen übergeben Es werden Slices einer anderen kompatiblen Schnittstelle erwartet, wodurch der Fehler behoben wird, der beim Versuch auftritt, das Original-Slice direkt zu übergeben.
Das obige ist der detaillierte Inhalt vonWie übergebe ich Slices kompatibler Schnittstellen in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!