Go で数値型のジェネリック関数を記述する
Go では、int や float64 などのさまざまな数値型を扱う場合、次の関数を作成する必要があります。型固有の関数を使用したり、値を共通の型に変換したりします。より洗練されたアプローチは、型パラメーターとインターフェイス制約を使用してジェネリック関数を作成することです。
型パラメーターと数値制約の使用
Go 1.18 以降では、次のように定義できます。型パラメータ T を持ち、T を Number インターフェイスに制約するジェネリック関数。次のように定義されます。
import "golang.org/x/exp/constraints" type Number interface { constraints.Integer | constraints.Float }
この制約には、すべての符号付き整数型と符号なし整数型、および浮動小数点型が含まれます。ジェネリック関数は次のように記述できます。
func add[T Number](a, b T) T { return a + b }
ジェネリック関数の呼び出し
このジェネリック関数を使用すると、数値型の任意の 2 つの引数に対して算術演算を実行できるようになります。 。例:
a := 1 b := 2.5 fmt.Println(add(a, b)) // 3.5
制限事項
ジェネリック関数の引数は同じ型でなければならないことに注意してください。さらに、関数内で実行できる演算は、数値制約のすべての型 (つまり、、-、*、/) でサポートされている演算に限定されます。
複素数の処理
Go は複合型 (complex64 および complex128) もサポートします。これらをジェネリック関数に含める場合は、数値制約を拡張して制約を含めることができます。複雑:
type Number interface { constraints.Integer | constraints.Float | constraints.Complex }
Go の算術演算子は、% を除き、複合型でもサポートされていることを覚えておいてください。演算子とビット演算子。これらは整数型でのみサポートされます。
以上がGo でさまざまな数値型を処理するジェネリック関数を作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。