


Go: So geben Sie eine Typbeschränkung an, bei der der Argumenttyp der Methode mit dem Typ des Empfängers übereinstimmt
In der Go-Sprache können wir Typeinschränkungen verwenden, um die Parametertypen von Funktionen oder Methoden anzugeben. Wenn wir möchten, dass der Parametertyp einer Methode mit dem Empfängertyp identisch ist, wie geben wir ihn an? Zunächst muss klar sein, dass die Go-Sprache die Funktion, dass der Parametertyp mit dem Empfängertyp übereinstimmt, nicht direkt unterstützt. Allerdings können wir einen ähnlichen Effekt erzielen, indem wir Zeigertypen in Methodendefinitionen verwenden. Als Nächstes erfahren Sie, wie Sie den Parametertyp so festlegen, dass er mit dem Empfängertyp in der Go-Sprache übereinstimmt.
Frageninhalt
Ich möchte eine Typbeschränkung wie unten gezeigt angeben:
type Comparer interface { Compare(another Comparer) int }
Aber ich möchte, dass der Implementierungstyp seinen eigenen konkreten Typ an die Methode übergibt Compare
而不是接口 Comparer
中,如下所示(我知道以下没有实现 Comparer
):
func (a MyInt) Compare(b MyInt) int { xxxx return xxxx }
Ich versuche, eine generische Schnittstelle wie diese zu verwenden:
type Comparer[T any] interface { Compare(T) int }
Aber das zwingt den Empfänger der Methode Compare
nicht dazu, ebenfalls vom Typ T zu sein.
Gibt es eine Möglichkeit, zu erzwingen, dass der Empfängertyp und der Parametertyp einer Methode Compare
gleich sind?
Workaround
Wenn Sie von Einschränkungen sprechen, beziehen Sie sich im Wesentlichen auf eine bestimmte Verwendung eines Schnittstellentyps als Einschränkung des Satzes von Typparametern.
Wenn Sie die Schnittstelle also (richtig) definieren als:
type Comparer[T any] interface { Compare(T) int }
Du erzählst nur die halbe Geschichte. Tatsächlich stellt das oben Genannte keine Einschränkung dar. Es ist nur eine Schnittstelle.
Um wirklich eine Typbeschränkung zu sein, muss die Schnittstelle als solche verwendet werden.
func Foo[T Comparer[T]](t1, t2 T) int { return t1.Compare(t2) } type Thing[T Comparer[T]] struct { Value T }
sich selbst erzwingen, indem Sie die Einschränkung mit ihren Typparametern instanziieren. Compare(T)
的接收者为 T
beabsichtigt ohne Einschränkungen hinsichtlich der Typen, die sie implementieren können.
<小时>Sie können jetzt Typbegriffe verwenden, um anzugeben, welche Typen eine bestimmte Schnittstelle implementieren müssen. Typparameter können jedoch nicht direkt als Typbegriffe verwendet werden. Sie müssen einen unbenannten Typ verwenden, beispielsweise einen Zeiger auf: T
type Comparer[T any] interface { *T Compare(T) int }
, was möglicherweise ideal ist. *MyInt
T Comparer[T]
mit seinen eigenen Typparametern instanziiert werden, da die Einschränkung eine zusätzliche Ebene der Zeigerindirektion erzwingen würde, egal was ist. Funktionsparameter erfüllen dies niemals. T Comparer[T]
因为无论 T
mit verschiedenen Typparametern zu instanziieren. Comparer
func test[T any, V Comparer[T]](a, b T) int { return V(&a).Compare(b) }
type MyInt int func (t *MyInt) Compare(other MyInt) int { // implementation }
Spielplatz
https://www.php.cn/link/3ea816621e0d8ecd5e534ec28051d4d5
Das obige ist der detaillierte Inhalt vonGo: So geben Sie eine Typbeschränkung an, bei der der Argumenttyp der Methode mit dem Typ des Empfängers übereinstimmt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



In der Bibliothek, die für den Betrieb der Schwimmpunktnummer in der GO-Sprache verwendet wird, wird die Genauigkeit sichergestellt, wie die Genauigkeit ...

Das Problem der Warteschlange Threading In Go Crawler Colly untersucht das Problem der Verwendung der Colly Crawler Library in Go -Sprache. Entwickler stoßen häufig auf Probleme mit Threads und Anfordern von Warteschlangen. � ...

Welche Bibliotheken in GO werden von großen Unternehmen oder bekannten Open-Source-Projekten entwickelt? Bei der Programmierung in Go begegnen Entwickler häufig auf einige häufige Bedürfnisse, ...

Zwei Möglichkeiten, Strukturen in der GO -Sprache zu definieren: Der Unterschied zwischen VAR- und Typ -Schlüsselwörtern. Bei der Definition von Strukturen sieht die Sprache oft zwei verschiedene Schreibweisen: Erstens ...

Der Unterschied zwischen Stringdruck in GO -Sprache: Der Unterschied in der Wirkung der Verwendung von Println und String () ist in Go ...

Das Problem der Verwendung von RETISTREAM zur Implementierung von Nachrichtenwarteschlangen in der GO -Sprache besteht darin, die Go -Sprache und Redis zu verwenden ...

Was soll ich tun, wenn die benutzerdefinierten Strukturbezeichnungen in Goland nicht angezeigt werden? Bei der Verwendung von Goland für GO -Sprachentwicklung begegnen viele Entwickler benutzerdefinierte Struktur -Tags ...

Go Zeigersyntax und Probleme bei der Verwendung der Viper -Bibliothek bei der Programmierung in Go -Sprache. Es ist entscheidend, die Syntax und Verwendung von Zeigern zu verstehen, insbesondere in ...
