Heim >Backend-Entwicklung >Golang >Warum implementiert meine Go-Struktur nicht die Schnittstelle: Nicht übereinstimmende Methodenparameter?

Warum implementiert meine Go-Struktur nicht die Schnittstelle: Nicht übereinstimmende Methodenparameter?

Barbara Streisand
Barbara StreisandOriginal
2024-12-04 12:28:11541Durchsuche

Why Doesn't My Go Struct Implement the Interface: Mismatched Method Parameters?

Hindernis bei der Schnittstellenimplementierung durch nicht übereinstimmende Methodenparameter

Problem:

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.

Lösung:

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
}

Hilfshinweise:

  • Schnittstellen fördern die Wiederverwendbarkeit von Code, indem sie verschiedene Typen zulassen um gemeinsame Methoden zu teilen.
  • Die Implementierung einer Schnittstelle garantiert, dass ein Typ die in der Schnittstelle definierte notwendige Funktionalität bereitstellt.
  • Es ist wichtig sicherzustellen, dass die Parametertypen in den Methodenimplementierungen mit den Spezifikationen der Schnittstelle übereinstimmen.

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!

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