Eingeschränkte Typen als Argumente in Go 1.18 verwenden
In Go 1.18-Generika ermöglichen eingeschränkte Typen Entwicklern, benutzerdefinierte Datentypen mit angegebenen Einschränkungen zu definieren. Wenn jedoch eingeschränkte Typen als Argumente für Funktionen verwendet werden, die konkrete Typen erwarten, ist eine Typkonvertierung erforderlich.
Betrachten Sie das folgende Beispiel:
<code class="go">type Pokemon interface { ReceiveDamage(float64) InflictDamage(Pokemon) } type Float interface { float32 | float64 } type Charmander[F Float] struct { Health F AttackPower F }</code>
Hier implementiert Charmander die Pokemon-Schnittstelle mit einem Generikum Typparameter F, der entweder mit float32 oder float64 instanziiert werden kann. Versuche, AttackPower (einen eingeschränkten Typ) als float64-Argument in other.ReceiveDamage() zu verwenden, führen jedoch zu einem Fehler:
<code class="go">func (c *Charmander[float64]) InflictDamage(other Pokemon) { other.ReceiveDamage(c.AttackPower) }</code>
Typkonvertierung für Kompatibilität
Um dieses Problem zu beheben, muss eine Typkonvertierung verwendet werden, um die Kompatibilität zwischen dem eingeschränkten Typ und dem von der Funktion erwarteten konkreten Typ sicherzustellen. Dies liegt daran, dass F nicht äquivalent zu float64 ist, selbst wenn es auf float64 beschränkt ist.
Der korrigierte Code wird:
<code class="go">func (c *Charmander[T]) InflictDamage(other Pokemon) { other.ReceiveDamage(float64(c.AttackPower)) }</code>
In ähnlicher Weise wird die Methode „ReceiveDamage()“ geändert, um einen eingeschränkten Typ zu verarbeiten ( Gesundheit) durch Konvertieren des Schadensarguments in den eingeschränkten Typ:
<code class="go">func (c *Charmander[T]) ReceiveDamage(damage float64) { c.Health -= T(damage) }</code>
Präzisionsüberlegungen
Es ist wichtig zu beachten, dass die Konvertierung von float64 in float32 (wenn F wird mit float32 instanziiert) kann zu Präzisionsverlusten führen. Dies muss möglicherweise in bestimmten Anwendungsfällen berücksichtigt werden.
Das obige ist der detaillierte Inhalt vonWie behandelt man eingeschränkte Typen als Argumente in Go 1.18 Generics?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!