In einem Go-Programm ist die Unfähigkeit einer Struktur, eine Schnittstelle zu implementieren, auf eine Nichtübereinstimmung zwischen zurückzuführen die Methodenparametertypen in der Struktur und die Schnittstelle.
Damit eine Struktur eine Schnittstelle implementieren kann, müssen ihre Methoden genau mit den in der Schnittstelle definierten Methodensignaturen übereinstimmen. Dazu gehören nicht nur der Methodenname und der Rückgabetyp, sondern auch die Parametertypen.
Im bereitgestellten Code akzeptiert die Connect-Methode der D-Struktur einen (*C)-Parameter anstelle eines (A)-Parameters, wie z wird von der B-Schnittstelle benötigt, die implementiert werden soll. Diese Nichtübereinstimmung verursacht den Fehler.
Um das Problem zu beheben, muss die Connect-Methode so geändert werden, dass sie mit der Signatur der Schnittstelle übereinstimmt:
package main import "fmt" type A interface { Close() } type B interface { Connect() (A, error) } type C struct { } func (c *C) Close() { fmt.Println("Closing C") } type D struct { } func (d *D) Connect() (A, error) { c := new(C) return c, nil } func test(b B) { c, _ := b.Connect() fmt.Println("Creating A from B") c.Close() } func main() { d := new(D) test(d) }
Mit dieser Korrektur implementiert die D-Struktur jetzt die B-Schnittstelle :
func (d *D) Connect() (A, error) { c := new(C) return c, nil }
Das obige ist der detaillierte Inhalt vonWarum implementiert meine Go-Struktur nicht die Schnittstelle: Nicht übereinstimmende Methodenparameter?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!