„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > ## Wie konvertiere ich ein Interface-Slice in ein kompatibles Interface-Slice in Go?

## Wie konvertiere ich ein Interface-Slice in ein kompatibles Interface-Slice in Go?

Veröffentlicht am 02.11.2024
Durchsuche:125

## How to Convert a Slice of Interfaces to a Compatible Interface Slice in Go?

Konvertieren von Schnittstellenabschnitten in kompatible Schnittstellenabschnitte

Die Implementierung verschiedener Schnittstellen, die überlappende Methoden enthalten, kann Flexibilität bei der Programmierung bieten. Allerdings kann die Übergabe eines Teils einer Schnittstelle an eine Funktion, die eine andere, aber kompatible Schnittstelle erwartet, zu Fehlern führen. Sehen wir uns an, wie wir dieses Problem in Go angehen können.

Angenommen, wir haben die Schnittstellen A und B, wobei A B einschließt. Eine Implementierung von A, Impl, erfüllt sowohl A als auch B.

type A interface {
    Close() error
    Read(b []byte) (int, error)
}

type Impl struct {}

func (I Impl) Read(b []byte) (int, error) {
    fmt.Println("In read!")
    return 10, nil
}

func (I Impl) Close() error {
    fmt.Println("I am here!")
    return nil
}

Einzelne Elemente können problemlos über Funktionen hinweg übergeben werden. Der Versuch, Slices von A an Funktionen zu übergeben, die io.Reader erwarten, kann jedoch fehlschlagen.

func single(r io.Reader) {
    fmt.Println("in single")
}

func slice(r []io.Reader) {
    fmt.Println("in slice")
}

im := &Impl{}

// works
single(im)

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

Um dieses Problem zu lösen, können wir ein neues Slice vom Typ []io.Reader erstellen und es mit Elementen aus []A füllen. Dies ist die Problemumgehung, um die Einschränkung zu umgehen und die Kompatibilität zwischen verschiedenen, aber überlappenden Schnittstellentypen sicherzustellen.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3