Go 1.18 のジェネリック プログラミングでは、次のパラメーター受け渡しの変更が導入されています: 型推論: コンパイラーは、手動で指定することなく、ジェネリック関数と型パラメーターを自動的に推論します。値のセマンティクス: ジェネリック関数は値を操作し、元の変数を変更しません。ユニバーサル コードの再利用: ジェネリック プログラミングでは、あらゆる種類のデータを処理できるユニバーサルな関数と型を作成できるため、コードの再利用が可能になります。
Go 1.18 でのジェネリック プログラミングの導入後、パラメーター受け渡しは大幅に変更されました。ジェネリック関数とジェネリック型は、あらゆる型の引数を受け入れることができるようになり、引数の受け渡しと使用方法に大きな変化が生じています。
Go の汎用プログラミングでは、関数呼び出しで型パラメーターを明示的に指定する必要がありません。コンパイラーは正しい型を自動的に推論できるようになり、コードがより簡潔で読みやすくなります。
例:
// 使用泛型类型 func Max[T any](a, b T) T { if a > b { return a } return b }
Max
関数を呼び出すと、コンパイラは a
と b
が # 型であると推論できます。 ## int、明示的に指定する必要はありません:
result := Max(10, 5) // result 类型自动推断为 int値セマンティクスJava などの他の言語のジェネリックとは異なり、Go のジェネリック関数は値を操作します。これは、関数が元のパラメーター値を変更せず、変更された値を持つ新しい変数を返すことを意味します。 例:
func Increment[T any](x *T) { *x++ }この例では、
Increment 関数は、元の変数の代わりに
xx の
value をインクリメントします。自体。
ケース 1: 汎用関数を使用してスライスを並べ替える
汎用プログラミングを使用して、汎用のSort# # を作成できます。 # 任意の型の比較可能な要素を並べ替える関数: <pre class='brush:go;toolbar:false;'>func Sort[T comparable](arr []T) {
for i := 0; i < len(arr)-1; i++ {
for j := i + 1; j < len(arr); j++ {
if arr[i] > arr[j] {
arr[i], arr[j] = arr[j], arr[i]
}
}
}
}</pre>
type Queue[T any] struct {
data []T
}
func (q *Queue[T]) Enqueue(item T) {
q.data = append(q.data, item)
}
func (q *Queue[T]) Dequeue() T {
if len(q.data) == 0 {
return zeroValue[T]() // 返回 T 类型的零值
}
item := q.data[0]
q.data = q.data[1:]
return item
}
結論
以上がGolang 汎用プログラミングがパラメーター受け渡しに及ぼす影響の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。