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

Warum können Go Generics-Schnittstellenmethoden keine Typparameter haben?

Linda Hamilton
Linda HamiltonOriginal
2024-12-06 09:52:11414Durchsuche

Why Can't Go Generics Interface Methods Have Type Parameters?

Parametrierung von Schnittstellenmethoden in Go Generics

Beim Erkunden von Go Generics in Version 1.18beta2 stoßen Entwickler möglicherweise auf den Fehler „Schnittstellenmethode muss nein haben“. Typparameter“, wenn Sie versuchen, eine Schnittstelle mit Methoden zu definieren, die Typparameter akzeptieren. Dieser Fehler ist auf die Entwurfsentscheidung zurückzuführen, Typparameter in Schnittstellenmethodendefinitionen zu verbieten.

Der Grund für diese Einschränkung liegt in der Möglichkeit von Mehrdeutigkeiten und Auswirkungen auf die Leistung. Typparameter in Schnittstellenmethoden können zu Unsicherheit darüber führen, ob die Identität des Arguments erhalten bleibt, zur Notwendigkeit einer umfassenden Baumdurchquerung zur Kompilierungszeit oder zur Möglichkeit einer leistungsbeeinträchtigenden Reflexion zur Laufzeit.

Darüber hinaus können parametrisierte Methoden dies nicht direkt tun Implementieren Sie Schnittstellen, was zu Verwirrung führen könnte.

Es gibt jedoch eine Problemumgehung, die die Verwendung von Typparametern innerhalb einer Schnittstelle ermöglicht: Verschieben Sie den Typparameter in die Schnittstellentypdefinition sich selbst. Dieser Ansatz bewahrt die gewünschte Funktionalität und hält gleichzeitig die Designbeschränkungen von Go-Generika ein.

Zum Beispiel:

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
}

Das obige ist der detaillierte Inhalt vonWarum können Go Generics-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