Go で数値型のジェネリック関数を作成する方法
JavaScript および TypeScript ユーザーは、Go での数値型の処理について疑問に思うかもしれません。 int と float を使用するとき。この記事では、任意の数値引数を受け入れることができるジェネリック関数を作成する最良の方法を検討します。
Go 1.18 以降のジェネリック関数
での型パラメータの導入により、 Go 1.18 では、型 T でパラメータ化された関数を定義できるようになりました。インターフェイス制約を利用して、T を数値に制限できます。
func add[T Number](a, b T) T { return a + b }
ここで、制約 Number は golang.org/x/exp/constraints パッケージを使用して定義されています。
type Number interface { constraints.Integer | constraints.Float }
この制約により、T が次の型であることが保証されます。 constraints.Integer またはconstraints.Float.
Using Generic のいずれかを満たします。関数
この汎用の加算関数は、任意の数値型の引数を処理できます。ただし、両方の引数が同じ型である必要があることに注意することが重要です。例:
fmt.Println(add(1, 2)) // 3 fmt.Println(add(a, b)) // 3 fmt.Println(add(1.5, 3.2)) // 4.7
add(2.5, 2) などの型を混合しようとすると、コンパイル エラーが発生します。
複素数のサポート
数値制約を拡張して複素数を含めることができますtype:
type Number interface { constraints.Integer | constraints.Float | constraints.Complex }
複合型でサポートされているにもかかわらず、サポートされる演算子は依然として算術演算子 、 - 、 * 、 / のみです。モジュラス % およびビット演算子は、複合型ではサポートされていません。
以上がGo で数値型のジェネリック関数を作成するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。