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!