ホームページ > バックエンド開発 > Golang > Go 1.18 でジェネリック関数内に特定の型のオブジェクトを作成するにはどうすればよいですか?

Go 1.18 でジェネリック関数内に特定の型のオブジェクトを作成するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-15 17:10:11
オリジナル
231 人が閲覧しました

How Can I Create Objects of a Specific Type within a Generic Function in Go 1.18?

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 サイトの他の関連記事を参照してください。

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