Heim >Backend-Entwicklung >Golang >Warum können Go-Schnittstellenmethoden keine Typparameter haben?

Warum können Go-Schnittstellenmethoden keine Typparameter haben?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-03 18:54:11739Durchsuche

Why Can't Go Interface Methods Have Type Parameters?

Grundlegendes zu Typparametern von Schnittstellenmethoden in Go

In Go-Generika dürfen Schnittstellenmethoden keine Typparameter haben. Diese Einschränkung ergibt sich aus grundlegenden Designüberlegungen, die im Vorschlag zu Typparametern dargelegt sind.

Warum sind Typparameter in Schnittstellen verboten?

  • Mehrdeutigkeit: Typparameter in Schnittstellenmethoden können zu mehreren Interpretationen führen und sich auf die Implementierungskompatibilität und den Code auswirken Korrektheit.
  • Leistung: Das Zulassen von Typparametern könnte eine umfangreiche Baumdurchquerung zur Kompilierungszeit erfordern oder eine leistungsintensive Laufzeitreflexion einführen.
  • Konsistenz: Parametrisiert Methoden wären nicht in der Lage, Schnittstellen konsistent zu implementieren, was zu Verwirrung und Potenzial führen würde Fehler.

Implementieren generischer Abstraktionen

Obwohl Typparameter in Schnittstellenmethoden nicht zulässig sind, bietet die Sprache einen alternativen Ansatz. Sie können den Typparameter in die Schnittstellentypdefinition selbst verschieben, wie unten gezeigt:

type Reader[V Unmarshaler] interface {
    Read(bucket []byte, k ...[]byte) ([][]byte, error)
    ReadDoc(bucket []byte, factory func() (V, error), k ...[]byte) ([]V, error)
}

type Unmarshaler interface {
    UnmarshalKV(v []byte) error
}

Dieser Ansatz bewahrt die gewünschte generische Abstraktion, ohne die Typparameterbeschränkung der Schnittstellenmethode zu verletzen.

Das obige ist der detaillierte Inhalt vonWarum können Go-Schnittstellenmethoden keine Typparameter haben?. 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