Golang ジェネリックの定義と適用

王林
リリース: 2024-04-04 10:18:02
オリジナル
1009 人が閲覧しました

ジェネリックは、型に依存しないコードを作成するために Go 1.18 で導入されました。ジェネリックスでは、角かっこ [] を使用して、func Sort[T any](arr []T) などの型パラメーターを定義します。 Go コンパイラーは、func Swap[T](x, y T) のような型パラメーターを推論できます。ジェネリックスを使用すると、二分探索ツリー型 Node[T any] struct { … } などのデータ構造を構築したり、型 Node[T 比較可能] struct { … } などの型制約を課したりすることができます。 Go ジェネリックは、新しい型を作成せずにコードの柔軟性を高めます。

Golang ジェネリックの定義と適用

Go ジェネリックの定義と適用

Go 1.18 では、Go 言語に待望の機能 ジェネリック が導入されました。ジェネリックを使用すると、特定の型に依存しないデータ構造とアルゴリズムを作成できるため、コードがより再利用可能で柔軟になります。

ジェネリックスの定義

ジェネリックスは角かっこ [] を使用して定義され、任意の数の型パラメーターが含まれます:

func Sort[T any](arr []T)
ログイン後にコピー

上の例では、 T は型パラメータです。つまり、任意の型の項目にすることができます。

型推論

関数のジェネリック型パラメーターは、コンテキストから推論できる場合は省略できます。

func Swap[T](x, y T)
ログイン後にコピー

この関数は、任意の型の 2 つの引数を受け取ることができます。一緒に使用されます。 Go コンパイラーは、Tx および y 型であるべきだと推論します。

実践的なケース: 二分探索ツリー

二分探索ツリーの汎用バージョンを作成しましょう:

type Node[T any] struct {
    Value    T
    Left     *Node[T]
    Right    *Node[T]
}

func Insert[T comparable](n *Node[T], value T) *Node[T] {
    // ...
}

func Search[T comparable](n *Node[T], value T) *Node[T] {
    // ...
}
ログイン後にコピー

この二分探索ツリーを使用すると、次の要素を保存および検索できます。匹敵するタイプ。

型制約

型パラメーターに制約を課す必要がある場合があります。たとえば、二分探索ツリー内の 2 つの値の比較が有効であることを確認するには、Tcomparable インターフェイスを実装することを要求できます。

type Node[T comparable] struct {
    // ...
}
ログイン後にコピー

Notes

  • Go のジェネリクスは型テンプレートではなく、新しい型を作成しません。
  • ジェネリック型パラメータはインスタンス化できません。
  • 型推論は、関数の宣言時ではなく、関数の呼び出し時にのみ適用されます。

結論

Go ジェネリックは、Go 言語に強力な新機能をもたらします。ジェネリックを定義して使用する方法を理解することは、コードをより柔軟で再利用可能にする鍵となります。

以上がGolang ジェネリックの定義と適用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!