Heim > Backend-Entwicklung > Golang > Warum verursacht der Rückgabetyp meiner Go-Schnittstellenmethode einen Kompilierungsfehler?

Warum verursacht der Rückgabetyp meiner Go-Schnittstellenmethode einen Kompilierungsfehler?

Linda Hamilton
Freigeben: 2024-11-09 22:38:02
Original
804 Leute haben es durchsucht

Why Does My Go Interface Method Return Type Cause a Compilation Error?

Rückgabetyp der Schnittstellenmethode als Schnittstelle in Go

Frage:

Implementierung einer Schnittstelle Eine Methode, die in Golang einen Schnittstellentyp zurückgibt, kann zu Kompilierungsfehlern führen. Betrachten Sie den folgenden Code:

type IA interface {
    FB() IB
}

type IB interface {
    Bar() string
}

type A struct {
    b *B
}

func (a *A) FB() *B {
    return a.b
}

type B struct{}

func (b *B) Bar() string {
    return "Bar!"
}
Nach dem Login kopieren

Das Ausführen dieses Codes führt zu folgendem Fehler:

cannot use a (type *A) as type IA in function argument:
    *A does not implement IA (wrong type for FB method)
        have FB() *B
        want FB() IB
Nach dem Login kopieren

Lösung:

Um dieses Problem zu beheben , muss der Rückgabetyp der FB-Methode mit dem in der IA-Schnittstelle angegebenen Typ übereinstimmen. Daher ist die folgende Änderung erforderlich:

func (a *A) FB() IB {
    return a.b
}
Nach dem Login kopieren

Mit dieser Änderung wird der Code erfolgreich kompiliert, da der Rückgabetyp von FB jetzt IB ist, wie in der IA-Schnittstelle definiert.

Zusätzliche Überlegungen:

Wenn die IA- und IB-Schnittstellen in separaten Paketen definiert sind, muss die Importanweisung für das Paket, das IB enthält, vorhanden sein in der Datei enthalten, in der die FB-Methode implementiert ist. Darüber hinaus muss der Rückgabetyp von FB mit dem entsprechenden Paketnamen qualifiziert werden:

import (
    "foo" // Package containing IB interface
)

// Implementation in package bar
func (a *A) FB() foo.IB {
    return a.b
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum verursacht der Rückgabetyp meiner Go-Schnittstellenmethode einen Kompilierungsfehler?. 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