Go ジェネリックスは、型パラメーター化を導入することで関数の型推論を変更します。パラメーター型: []A、ここで、A は数値インターフェイスを満たす実際の型パラメーターであり、呼び出されたときに具体化されます。戻り値の型: パラメーターの型と同じで、A であると推測されます。
Go ジェネリクスが関数の型推論に与える影響
Go 言語のジェネリクスでは、新しい型推論メカニズムが導入され、これが関数の型推論の方法に影響を与えます。関数型の推論が実行されます。 Go ジェネリックを正しく使用するには、これらの変更を理解することが重要です。
従来の型推論
Go ジェネリックスが登場する前は、関数の型推論はコンテキスト内の型情報に基づいていました。たとえば、次の関数:
func SumNumbers(numbers []int) int { sum := 0 for _, number := range numbers { sum += number } return sum }
は、SumNumbers
のパラメータの型が []int
であり、戻り値の型が int## であると推論します。 #。これは、
range ステートメントの
number 変数の型が
int であるのに対し、
sum 変数の型は
int# であるためです。 ## 。
Go ジェネリックでは、型パラメーター化の追加レイヤーが導入され、関数の型推論の実行方法が変わります。次の汎用関数を考えてみましょう:
func Sum[T number](numbers []T) T { sum := zero[T]() for _, number := range numbers { sum += number } return sum }
ここで、
Sum 関数には型パラメータ T
があり、型 T
が数値型。つまり、number
インターフェイスを実装する必要があります。この場合、関数の型は次のように推論されます:
A
は を満たすインターフェイスです。 number
実際の型パラメータ (呼び出し時に具体化される)。
関数の戻り値の型:
次に、
Sum 汎用関数の使用例を示します: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:go;toolbar:false;'>// 求和整型数组
sum := Sum([]int{1, 2, 3}) // 推断 T 为 int
// 求和浮点型数组
sumF := Sum([]float64{1.2, 2.3, 3.4}) // 推断 T 为 float64</pre><div class="contentsignin">ログイン後にコピー</div></div>As youはい、Sum<p> ジェネリック関数は、呼び出されたときに実際の型パラメーターに基づいて型推論を実行できます。 <code>
以上がGolang ジェネリックは関数の型推論にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。