一般的なベスト プラクティスに進む: 型パラメータを定義するときは小文字の 1 文字を使用し、型宣言を使用し、メソッド シグネチャで山かっこ宣言を使用します。過度な一般化を避け、必要な場合にのみ一般化します。型の安全性を確保するには、型制約を使用します。空のインターフェイス (~interface{}) は、型の安全性を犠牲にしないように注意して使用してください。型の別名を使用して、可読性と保守性を向上させます。
Go ジェネリックは、再利用可能でタイプセーフなコードを作成できる強力な機能です。このガイドでは、Go ジェネリックを最大限に活用するためのベスト プラクティスとアドバイスをいくつか提供します。
型パラメータを定義するときは、次の規則に従ってください:
例:
type MyList[T any] []T
ジェネリックは強力ではありますが、過剰な一般化を引き起こす可能性もあります。本当に必要な場合にのみ一般化してください。次の例を考えてみましょう。
// 错误:过度泛化 func Sort[T any](s []T) // 正确:只泛化排序元素 func SortInts(s []int) func SortStrings(s []string)
型制約を使用すると、型パラメーターが満たさなければならない条件を指定できます。これは、ジェネリック コードがタイプ セーフであることを保証するのに役立ちます。
type Number interface { ~int | ~int32 | ~int64 | ~float32 | ~float64 } func Sum[T Number](s []T) T
空のインターフェイス (~interface{}) は非常に柔軟ですが、型の安全性が犠牲になります。空のインターフェイスは、絶対に必要な場合にのみ使用してください。
型エイリアスを使用すると、型パラメーターのカスタム エイリアスを作成できます。これにより、可読性と保守性が向上します。
type IntList = MyList[int]
ジェネリックスを使用した次のリストの並べ替え関数を考えてみましょう:
import "sort" // MyList 定义一个泛型列表类型 type MyList[T any] []T // Sort 对列表进行排序 func (l MyList[T]) Sort() { sort.Slice(l, func(i, j int) bool { return l[i] < l[j] }) }
この例では、型パラメーター T
が定義されています。 any
のように、これは関数が任意の型の値のリストを並べ替えできることを意味します。
Go ジェネリックスを使用すると、より再利用可能でタイプセーフなコードを作成できます。これらのベスト プラクティスと推奨事項に従うことで、ジェネリック機能を最大限に活用できます。
以上がgolang ジェネリックのベスト プラクティスと推奨事項の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。