Heim  >  Artikel  >  Backend-Entwicklung  >  Wie übergebe ich Slices kompatibler Schnittstellen in Go?

Wie übergebe ich Slices kompatibler Schnittstellen in Go?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-25 06:01:02500Durchsuche

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)

}

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

fmt.Println("in single")

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

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!

Stellungnahme:
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