Heim  >  Artikel  >  Backend-Entwicklung  >  Wie übergebe ich einen Ausschnitt einer Schnittstelle an eine Funktion und erwarte in Go einen Ausschnitt einer kompatiblen, aber unterschiedlichen Schnittstelle?

Wie übergebe ich einen Ausschnitt einer Schnittstelle an eine Funktion und erwarte in Go einen Ausschnitt einer kompatiblen, aber unterschiedlichen Schnittstelle?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-25 10:22:02278Durchsuche

How to Pass a Slice of One Interface to a Function Expecting a Slice of a Compatible but Different Interface in Go?

Übergabe eines Interface-Slices an ein anderes kompatibles Interface-Slice

In Go kann es zu einer Herausforderung kommen, wenn Sie versuchen, ein Slice eines zu übergeben Schnittstelle zu einer Funktion, die einen Teil einer anderen, aber kompatiblen Schnittstelle erwartet. Während einzelne Elemente erfolgreich übergeben werden können, können Teile der ursprünglichen Schnittstelle fehlschlagen.

Zum Beispiel, wenn Sie zwei Schnittstellen haben, A und B, wobei A B einschließt, und eine konkrete Implementierung von A, die auch B erfüllt , kann dieses Problem auftreten. Die Übergabe eines einzelnen Elements vom Typ A an eine Funktion, die io.Reader erwartet, wird funktionieren, aber der Versuch, ein Segment von A an eine Funktion zu übergeben, die []io.Reader erwartet, wird fehlschlagen.

Dies liegt daran, dass Go statisch ist typisierte Sprache und erlaubt keine impliziten Typkonvertierungen. Um dieses Problem zu beheben, müssen Sie ein neues Slice des erwarteten Typs erstellen und Elemente aus dem ursprünglichen Slice manuell zuweisen. Im bereitgestellten Beispiel deutet die Fehlermeldung darauf hin, dass []A nicht direkt []io.Reader zugewiesen werden kann.

Daher besteht die empfohlene Lösung darin, ein neues Segment von []io.Reader zu erstellen und Elemente zu kopieren aus dem []A-Slice manuell. Dadurch wird sichergestellt, dass die Funktion wie erwartet den richtigen Slice-Typ erhält.

Das obige ist der detaillierte Inhalt vonWie übergebe ich einen Ausschnitt einer Schnittstelle an eine Funktion und erwarte in Go einen Ausschnitt einer kompatiblen, aber unterschiedlichen Schnittstelle?. 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