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

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

Patricia Arquette
リリース: 2025-01-04 04:25:39
オリジナル
375 人が閲覧しました

How Can I Write Generic Numerical Functions in Go?

Go での汎用数値関数の作成

Go では、さまざまな数値型を扱うときに、次のような関数が必要になることがあります。任意の数値データ。ここでは、Go 1.18 以降でこのユースケースに対処する方法と、以前のバージョンで考えられる解決策を検討します。

Go 1.18 以降:
型の導入によりGo 1.18 ではパラメータを使用するため、ジェネリック関数の定義は簡単です。

func add[T Number](a, b T) T {
  return a + b;
}
ログイン後にコピー

ここで、T は型パラメータを表し、 Number インターフェイスによって制限されます。 golang.org/x/exp/constraints パッケージを使用して定義されたこのインターフェイスは、T が数値型であることを保証します。このアプローチでは、任意の 2 つの数値型 (整数または浮動小数点) を引数として使用でき、関数は同じ型の結果を返します。

Go の以前のバージョン:

以前の Go バージョンでは、これを処理する方法がいくつかあります状況:

  • 浮動小数点に変換: オプションの 1 つは、整数と浮動小数点の両方の範囲をカバーするため、すべての入力を float64 に変換することです。ただし、これにより不必要な型変換が発生し、整数データの精度が失われる可能性があります。
  • 型固有の関数の作成: 特定の数値型ごとに個別の関数 (addInt など) を作成できます。整数の場合は (a, b int) int、浮動小数点数の場合は addFloat(a, b float64) float64 です。このアプローチは型安全性を提供しますが、複数の関数を維持する必要があります。

結論:

推奨されるソリューションは、使用されている Go バージョンによって異なります。 Go 1.18 以降では、型パラメーターと Number 制約を使用するジェネリック関数アプローチが最も簡潔で効率的です。以前のバージョンの場合、float に変換するか、型固有の関数を管理するかを選択する必要があります。

以上がGo でジェネリック数値関数を作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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