Heim >Backend-Entwicklung >Golang >Wie kann ich auf gemeinsam genutzte Methoden in den Union-Einschränkungen von Go Generics zugreifen?
Zugriff auf gemeinsam genutzte Methoden in Union Constraints mit Go Generics
In Go Generics (v1.18) ermöglichen Typ-Union-Einschränkungen die Definition von Schnittstellen, die akzeptieren Werte aus mehreren Typen. Es stellt sich jedoch die Frage, wie auf gemeinsam genutzte Methoden dieser Typen zugegriffen werden kann.
Betrachten Sie das folgende Beispiel:
type A struct {} type B struct {} type AB interface { *A | *B } func (a *A) some() bool {...} func (b *B) some() bool {...} func some[T AB](x T) bool { return x.some() // error }
Während A und B in diesem Code die Methode „some“ teilen, teilen sich die Beim Versuch, von einem [T AB] darauf zuzugreifen, tritt ein Fehler auf. Dies liegt daran, dass der Compiler nur Methoden erkennt, die explizit in der Einschränkungsschnittstelle deklariert sind.
Um dieses Problem zu beheben, kann man die gemeinsam genutzte Methode zur Schnittstelleneinschränkung hinzufügen, wie unten gezeigt:
type AB interface { *A | *B some() bool } func some[T AB](x T) bool { return x.some() // Works }
Dieser Ansatz beschränkt T auf Typen von A oder B, die die Some-Methode implementieren.
Diese Lösung ist jedoch eine Problemumgehung für eine Einschränkung in Go 1.18-Generika. Die Sprachspezifikation legt nahe, dass dies möglich sein sollte, der Compiler unterstützt dies jedoch nicht. Diese Einschränkung wurde in den Versionshinweisen zu Go 1.18 bestätigt und ist in Problem Nr. 51183 dokumentiert. Es besteht die Hoffnung, dass diese Einschränkung in Go 1.19 aufgehoben wird.
Das obige ist der detaillierte Inhalt vonWie kann ich auf gemeinsam genutzte Methoden in den Union-Einschränkungen von Go Generics zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!