ホームページ >バックエンド開発 >Golang >Golang ジェネリックをゼロから理解する

Golang ジェネリックをゼロから理解する

PHPz
PHPzオリジナル
2024-03-18 17:21:04358ブラウズ

Golang ジェネリックをゼロから理解する

Golang は、Google によって設計および開発され、2009 年に初めてリリースされたオープンソース プログラミング言語です。 Golang は現代言語として、そのシンプルさと効率性から常に開発者に愛されてきました。しかし、最近まで、Golang はジェネリックスのサポートが不足していると批判されてきました。ジェネリックは、さまざまな種類のデータをサポートする汎用コードを作成できるようにするプログラミング言語の機能です。

Golang コミュニティでは、Golang がいつ汎用機能を実装するかについて議論がありました。 Go 1.18 バージョン (2021 年 3 月リリース) まで、Golang はジェネリック関数を正式にサポートすることを正式に発表しました。これは、Golang がジェネリックスに向けて大きな一歩を踏み出し、開発者がより柔軟で汎用性の高いコードを簡単に作成できるようになったということも意味します。

Golang の一般的な機能を理解するには、ゼロから始める必要があります。まず、Golang でジェネリック関数とデータ構造を定義する方法を理解する必要があります。以下は、汎用関数を使用してスライス要素検索関数を実装する方法を示す簡単な例です:

package main

輸入 (
    「fmt」
)

// 一般的な関数: スライス内の要素を検索します
func findElement[T 比較可能](スライス []T, 要素 T) bool {
    for _, v := 範囲スライス {
        if v == 要素 {
            trueを返す
        }
    }
    falseを返す
}

関数 main() {
    intSlice := []int{1, 2, 3, 4, 5}
    strSlice := []string{"リンゴ"、"バナナ"、"チェリー"}

    // 汎用関数を呼び出して要素を検索します
    fmt.Println(findElement(intSlice, 3)) // true
    fmt.Println(findElement(strSlice, "pear")) // false
}

上記のコードでは、ジェネリック関数 findElement を定義し、ジェネリック型パラメーター T を使用し、制約 comparable Ensure を使用します。渡された型が比較演算をサポートしていること。 main 関数では、intSlicestrSlice を定義し、それぞれ findElement 関数を呼び出して要素を検索しました。ジェネリック関数を使用すると、さまざまな種類のデータ構造に適したコードを一度に作成できるため、コードの再利用性が向上することがわかります。

ジェネリック関数に加えて、Golang のジェネリックスはジェネリック データ構造もサポートしています。以下は、汎用スライスを使用してスタック データ構造を実装する方法を示す簡単な例です:

package main

「fmt」をインポートします

// ジェネリック型: スタック
タイプ Stack[T 任意] []T

//スタックにプッシュ
func (s *Stack[T]) Push(値 T) {
    *s = 追加(*s, 値)
}

// スタックからポップします
func (s *Stack[T]) Pop() T {
    if len(*s) == 0 {
        Panic("スタックが空です")
    }
    値 := (*s)[len(*s)-1]
    *s = (*s)[:len(*s)-1]
    戻り値
}

関数 main() {
    var intStackStack[int]

    //スタックにプッシュ
    intStack.Push(1)
    intStack.Push(2)
    intStack.Push(3)

    // スタックからポップします
    fmt.Println(intStack.Pop()) // 3
    fmt.Println(intStack.Pop()) // 2
}

上記のコードでは、スタック データ構造を表すジェネリック型 Stack[T any] を定義し、スタックへのプッシュ Push も定義します。そして out StackPop メソッド。 main 関数では、intStack インスタンスを作成し、そのインスタンスに対してプッシュおよびポップ操作を実行します。汎用データ構造を通じて、上記の例のような一般的なスタック データ構造を定義でき、さまざまなタイプの要素を同時にサポートできます。

上記の 2 つの例を通じて、Golang での汎用機能の使用方法を予備的に理解しました。 Golang のジェネリック実装では、例に示されているジェネリック関数とジェネリック データ構造に加えて、ジェネリック インターフェイスやジェネリック型制約などの機能もサポートされており、開発者は特定のニーズに基づいてジェネリックを実装するための適切な機能を選択できます。

一般に、Golang の汎用関数は、開発者により強力なプログラミング機能を提供し、コードをより柔軟で多用途にします。 Golang の汎用関数は比較的遅くリリースされましたが、強力で使いやすく、開発者がユニバーサル コードをより効率的に作成するのに役立ちます。この記事が、読者が Golang の一般的な機能と、一般的なコードを最初から作成する方法をよりよく理解するのに役立つことを願っています。

以上がGolang ジェネリックをゼロから理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。