Heim > Backend-Entwicklung > Golang > Wie können gemeinsam genutzte Methoden mit den Type-Union-Einschränkungen von Go Generics verwendet werden?

Wie können gemeinsam genutzte Methoden mit den Type-Union-Einschränkungen von Go Generics verwendet werden?

Linda Hamilton
Freigeben: 2024-12-20 15:38:14
Original
667 Leute haben es durchsucht

How Can Shared Methods Be Used with Go Generics' Type Union Constraints?

Go Generics: Gemeinsam genutzte Methoden in Typunionen freischalten

In der neuen generischen Funktion von Go ermöglicht die Typunion-Einschränkung die Bindung mehrerer Typen ein einzelner generischer Typparameter. Es stellt sich jedoch die Frage: Wie können gemeinsame Methoden über diese Typen hinweg genutzt werden?

Anfangsversuch und Compilerfehler

<br>Typ-AB-Schnittstelle { </p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">*A | *B
Nach dem Login kopieren

}

func (a *A) some() bool {

return true
Nach dem Login kopieren

}

func (b *B) some() bool {

return false
Nach dem Login kopieren

}

func some[T AB] (x T) bool {

return x.some()   // undefined
Nach dem Login kopieren

}

Der obige Code versucht, die gemeinsam genutzte Some-Methode in der Funktion Some zu verwenden, stößt jedoch auf einen Fehler, da der Compiler nicht bestimmen kann, welche eine Methode zum Aufrufen.

Problemumgehung durch Schnittstellenbeschränkung

Um dies zu überwinden Einschränkung, die gemeinsam genutzte Methode kann direkt zur Schnittstellenbeschränkung hinzugefügt werden:

<br>type AB interface {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">*A | *B
some() bool
Nach dem Login kopieren

}

func some[ T AB](x T) bool {

return x.some()   // works
Nach dem Login kopieren

}

Dadurch wird sichergestellt, dass der generische Typ T die Schnittstellenbeschränkung erfüllen muss, zu der auch die Methode „some“ gehört.

Einschränkung in Go 1.18

Es ist wichtig zu beachten, dass es sich bei dieser Problemumgehung um eine vorübergehende Maßnahme handelt auf eine Einschränkung in Go 1.18. Die Go-Spezifikationen ermöglichen die Verwendung gemeinsam genutzter Methoden in Typunionen, die aktuelle Compiler-Implementierung beschränkt sie jedoch auf Methoden, die explizit in der Einschränkungsschnittstelle deklariert werden.

Auflösung in Go 1.19

In den Versionshinweisen zu Go 1.18 wird diese Einschränkung anerkannt und Pläne geäußert, sie in Go 1.19 zu entfernen, um den direkten Zugriff auf gemeinsam genutzte Methoden in Typunionen zu ermöglichen. Diese Verbesserung wird die Ausdruckskraft und Flexibilität von Go-Generika verbessern.

Das obige ist der detaillierte Inhalt vonWie können gemeinsam genutzte Methoden mit den Type-Union-Einschränkungen von Go Generics verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Vorheriger Artikel:Gos Einbettung vs. Vererbung: Zusammensetzung oder Komplexität? Nächster Artikel:Wie kann man gRPC-Dienste in Go mithilfe von Bufconn effektiv testen?
Erklärung dieser Website
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
Neueste Artikel des Autors
Aktuelle Ausgaben
verwandte Themen
Mehr>
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage