Go 1.18 で型付きジェネリックを使用したオブジェクトの作成
Go 1.18 では、ジェネリックを使用して任意のデータ型で動作する関数を作成できます。ただし、ジェネリック関数内で特定の型の新しいオブジェクトを作成するには、特定の構文が必要です。
Create 関数の実装
たとえば、次のような関数 "Create" について考えてみましょう。構造体「Apple」の新しいインスタンスを作成する必要があります。ジェネリックスでこれを実現するには:
type FruitFactory[T any] struct{} func (f FruitFactory[T]) Create() *T { // How to create non-nil fruit here? return nil // Placeholder, don't return nil } type Apple struct { color string }
アプローチ 1: 型変数の使用
「Apple」がポインター型でない場合、型付き変数を宣言できます。返されるアドレス:
func (f FruitFactory[T]) Create() *T { var a T // Declare variable of type T return &a // Return address of variable }
アプローチ 2: を使用する"new" 関数
または、"new" 関数を使用して新しいオブジェクトを作成することもできます。
func (f FruitFactory[T]) Create() *T { return new(T) }
ポインター型の処理
「FruitFactory」がポインター型でインスタンス化される場合、より複雑なアプローチは次のとおりです。必要:
// Constraining type to its pointer type type Ptr[T any] interface { *T } // Type parameters: FruitFactory (pointer type), FruitFactory (non-pointer type) type FruitFactory[T Ptr[U], U any] struct{} func (f FruitFactory[T,U]) Create() T { var a U // Declare non-pointer type variable return T(&a) // Convert to pointer type } type Apple struct { color string }
これらのアプローチに従うことで、Go 1.18 のジェネリックスを使用して任意の型の新しいオブジェクトを作成できます。
以上がGo 1.18 でジェネリック関数内に特定の型のオブジェクトを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。