Ü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!