Go プログラムを作成するとき、数値型を受け入れるかどうかに関係なく、任意の数値型を受け入れることができる関数を作成する必要がある場合があります。それは整数または浮動小数点です。 Go はこれらの型を厳密に区別するため、これは難しい場合があります。
この型は整数の範囲をカバーするため、1 つのアプローチはすべての数値引数を float64 に変換することです。ただし、これは、大きな整数を扱うときに精度の低下やエラーが発生する可能性があるため、常に望ましいとは限りません。
別のオプションは、数値ごとに個別の関数を作成することです。型 (整数の場合は addInt、浮動小数点の場合は addFloat など)。これにより型の安全性は確保されますが、コードの重複やメンテナンスの問題が発生する可能性があります。
Go 1.18 での型パラメーターの導入により、さらにエレガントなソリューションが利用可能になりました。任意の型 T を取る汎用関数を定義し、インターフェイス制約を使用して T を数値型に制限できます。
例:
func add[T Number](a, b T) T { return a + b } type Number interface { constraints.Integer | constraints.Float }
この関数は、次のような任意の数値型で使用できます。 int、int64、float32、および float64。 Number 制約により、数値型のみが許可されるようになります。
ジェネリック関数には同じ型の引数が必要であることに注意してください。たとえば、add 関数では、両方の引数が同じ数値型である必要があります。さらに、ジェネリック関数はすべての演算子、特に特定の型に固有の演算子 (整数のビットごとの演算子など) をサポートしているわけではありません。
型パラメータとインターフェイス制約を使用すると、ジェネリック関数を作成できます任意の数値型を受け入れることができます。このアプローチは、コードの重複を回避し、より優れた柔軟性を提供しながら、型安全性を提供します。
以上がGo で任意の数値型を処理するジェネリック関数を作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。