Heim >Backend-Entwicklung >Golang >Können die Union-Einschränkungen von Go Generics gemeinsam genutzte Methoden ohne explizite Schnittstellendeklaration aufrufen?

Können die Union-Einschränkungen von Go Generics gemeinsam genutzte Methoden ohne explizite Schnittstellendeklaration aufrufen?

Linda Hamilton
Linda HamiltonOriginal
2024-12-22 16:34:13572Durchsuche

Can Go Generics' Union Constraints Call Shared Methods Without Explicit Interface Declaration?

Aufrufen von Methoden für Union-Einschränkungen in Go Generics

In Go Generics (v1.18) können Sie auf eine Typ-Union-Einschränkung stoßen, die eine Einschränkung bewirkt den Parametertyp für Typen, die eine einheitliche Schnittstelle implementieren. Die Unfähigkeit, gemeinsam genutzte Methoden zwischen den eingeschränkten Typen aufzurufen, wirft jedoch Bedenken hinsichtlich der Nützlichkeit solcher Einschränkungen auf.

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() } // Compiler error

Der Compilerfehler „x.some undefiniert“ liegt daran, dass die Typ-Union-Beschränkung *A | *B garantiert nicht das Vorhandensein einer bestimmten Methode sowohl auf *A als auch auf *B.

Um dieses Problem zu beheben, können Sie die Methode zur Schnittstellenbeschränkung hinzufügen:

type AB interface { *A | *B; some() bool }

func some[T AB](x T) bool { return x.some() } // Works

Dies beschränkt T auf Typen, die sowohl *A als auch *B implementieren und die Methode some deklarieren.

Diese Lösung wird jedoch als Workaround für das angesehen, was idealerweise nur mit Typunionen funktionieren sollte. Go 1.18 weist derzeit Einschränkungen auf, da der Compiler den Aufruf einer Methode für einen Wert vom Typparameter P nur dann unterstützt, wenn die Methode m explizit durch die Einschränkungsschnittstelle von P deklariert wird. Obwohl die Sprachspezifikationen besagen, dass der Methodensatz einer Schnittstelle die Schnittmenge der Methodensätze jedes Typs im Typsatz der Schnittstelle ist. Dieses Problem wird voraussichtlich in Go 1.19 behoben.

Das obige ist der detaillierte Inhalt vonKönnen die Union-Einschränkungen von Go Generics gemeinsam genutzte Methoden ohne explizite Schnittstellendeklaration aufrufen?. 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