Heim >Backend-Entwicklung >Golang >Warum kann ich gemeinsam genutzte Methoden nicht mit den Union-Einschränkungen von Go Generics verwenden?
Union-Einschränkungen in Go-Generika: Ungelöste Einschränkungen
Im Bereich der Go-Generika haben Typ-Union-Einschränkungen für einige Verwirrung gesorgt. Beim Versuch, eine gemeinsame Methode für Typen innerhalb einer Union-Einschränkung zu verwenden, gibt der Compiler einen Fehler aus, sodass sich die Entwickler den Kopf zerbrechen.
Bedenken Sie den folgenden Code:
type A struct {} type B struct {} type AB interface { *A | *B } func (a *A) some() bool { return true } func (b *B) some() bool { return false } func some[T AB](x T) bool { return x.some() } // Compilation error
Der Compiler beschwert sich darüber x.some ist undefiniert, obwohl sowohl *A als auch *B die Methode some implementieren. Dies wirft die Frage auf: Warum überhaupt eine Union-Beschränkung definieren, wenn gemeinsame Methoden nicht verwendet werden können?
Die vom Go-Tracker vorgeschlagene Problemumgehung besteht darin, die Methode zur Schnittstellenbeschränkung hinzuzufügen:
type AB interface { *A | *B ; some() bool } func some[T AB](x T) bool { return x.some() } // Compiles
Dies ist jedoch eine unvollkommene Lösung. Die Typunion-Einschränkungen von Go sollten gemeinsame Methoden ermöglichen, ohne dass eine explizite Schnittstellendeklaration erforderlich ist. Leider handelt es sich hierbei um eine Einschränkung von Go 1.18, die in den Versionshinweisen dokumentiert ist:
Der Go-Compiler unterstützt derzeit nur den Aufruf einer Methode m für einen Wert x vom Typparametertyp P, wenn m explizit von der Einschränkungsschnittstelle von P deklariert wird .
Diese Einschränkung wird voraussichtlich in Go 1.19 behoben. Bis dahin müssen sich Entwickler auf die Problemumgehung verlassen oder einheitliche Schnittstellen für gemeinsam genutzte Methoden definieren.
Das obige ist der detaillierte Inhalt vonWarum kann ich gemeinsam genutzte Methoden nicht mit den Union-Einschränkungen von Go Generics verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!