ホームページ > バックエンド開発 > Golang > Go で任意の数値型を処理するジェネリック関数を作成するにはどうすればよいですか?

Go で任意の数値型を処理するジェネリック関数を作成するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-29 19:49:11
オリジナル
537 人が閲覧しました

How Can I Write Generic Functions in Go to Handle Any Numerical Type?

Go での任意の数値型のジェネリック関数の作成

Go プログラムを作成するとき、数値型を受け入れるかどうかに関係なく、任意の数値型を受け入れることができる関数を作成する必要がある場合があります。それは整数または浮動小数点です。 Go はこれらの型を厳密に区別するため、これは難しい場合があります。

Float への変換

この型は整数の範囲をカバーするため、1 つのアプローチはすべての数値引数を float64 に変換することです。ただし、これは、大きな整数を扱うときに精度の低下やエラーが発生する可能性があるため、常に望ましいとは限りません。

異なる型に関数を分離

別のオプションは、数値ごとに個別の関数を作成することです。型 (整数の場合は addInt、浮動小数点の場合は addFloat など)。これにより型の安全性は確保されますが、コードの重複やメンテナンスの問題が発生する可能性があります。

型パラメーターを使用したジェネリックス (Go 1.18 以降)

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート