Wie übergebe ich Slices kompatibler Schnittstellen in Go?

Mary-Kate Olsen
Freigeben: 2024-10-25 06:01:02
Original
586 Leute haben es durchsucht

How to Pass Slices of Compatible Interfaces in Go?

Ü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)
Nach dem Login kopieren

}

Typ B Schnittstelle {

Read(b []byte) (int, error)
Nach dem Login kopieren

}
`

Konkret implementiert die Impl-Struktur beide Schnittstellen:

`
Typ Impl-Struktur {}
func (I Impl) Read(b []byte) (int, error) {

return 10, nil
Nach dem Login kopieren

}
func (I Impl) Close() error {

return nil
Nach dem Login kopieren

}
`

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) {

fmt.Println("in single")

list := []A{impl}
slice(list) // FAILS

`
fmt.Println("in slice")
Nach dem Login kopieren

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))

für i, v := Bereichsliste {



}

slice(newSlice)

`

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage