Heim >Backend-Entwicklung >Golang >Wie kann ich auf gemeinsam genutzte Methoden in den Union-Einschränkungen von Go Generics zugreifen?

Wie kann ich auf gemeinsam genutzte Methoden in den Union-Einschränkungen von Go Generics zugreifen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-23 19:41:11189Durchsuche

How Can I Access Shared Methods in Go Generics' Union Constraints?

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!

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