Heim >Backend-Entwicklung >Golang >Warum kann ich gemeinsam genutzte Methoden nicht mit den Union-Einschränkungen von Go Generics verwenden?

Warum kann ich gemeinsam genutzte Methoden nicht mit den Union-Einschränkungen von Go Generics verwenden?

Linda Hamilton
Linda HamiltonOriginal
2024-12-22 18:17:10421Durchsuche

Why Can't I Use Shared Methods with Go Generics' Union Constraints?

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!

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