関数の引数として制約された型を使用する
Go 1.18 では、ジェネリックは、特定の型に制約された型パラメーターを使用して型を定義する方法を提供します。セット。ただし、具体的な型を期待する関数の引数として制約された型を使用すると、エラーが発生する可能性があります。型変換を使用した解決策を見てみましょう。
次の例を考えてみましょう。
<code class="go">type Pokemon interface { ReceiveDamage(float64) InflictDamage(Pokemon) } type Float interface { float32 | float64 } type Charmander[F Float] struct { Health F AttackPower F } func (c *Charmander[float64]) ReceiveDamage(damage float64) { c.Health -= damage } func (c *Charmander[float64]) InflictDamage(other Pokemon) { other.ReceiveDamage(c.AttackPower) }</code>
このプログラムをコンパイルしようとすると、c. AttackPower が F 型であるため、エラーが発生します。 float64 に制約されていますが、other.ReceiveDamage() は float64 引数を予期しています。
この問題を解決するには、c. AttackPower を Float を満たす具象型に明示的に変換する必要があります。この場合、float32 と float64 の両方が制約を満たすため、どちらかに変換できます。
更新されたメソッドは次のようになります。
<code class="go">func (c *Charmander[T]) ReceiveDamage(damage float64) { c.Health -= T(damage) } func (c *Charmander[T]) InflictDamage(other Pokemon) { other.ReceiveDamage(float64(c.AttackPower)) }</code>
これらの変換により、プログラムは正常にコンパイルされます。ヒトカゲ型をインスタンス化するときは、*Charmander[float64] など、F がバインドされる具体的な型を指定する必要があることに注意してください。
以上がGo 関数の引数として制約付き型を使用する場合の型エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。