ホームページ  >  記事  >  バックエンド開発  >  Golang ジェネリックの中心となる概念を理解する

Golang ジェネリックの中心となる概念を理解する

WBOY
WBOYオリジナル
2024-04-03 12:18:01493ブラウズ

Go ジェネリックを使用すると、コード自体を変更せずに再利用可能な型と関数を作成できます。これには以下が含まれます: ジェネリック型: 型パラメーターを使用し、型の作成時にパラメーター型を指定できるようにします (例: []T、map[K]V)。ジェネリック関数: 型パラメーターを使用する場合、明示的な型パラメーター リストを指定する必要があります。制約: ジェネリック型の使用を制限します。キーワード any、comparative、および type インターフェイスを使用して、型パラメーターの型制限を指定します。これらの概念を使用すると、汎用ソート アルゴリズムなど、より堅牢で汎用的なコードを作成できます。

Golang ジェネリックの中心となる概念を理解する

Golang ジェネリックの核となる概念を理解する

序文
ジェネリックは Go 1.18 An に含まれていますコード自体を変更せずに再利用可能な型と関数を作成できるようにする重要な新機能が導入されました。このチュートリアルでは、Go のジェネリックスの中心となる概念を紹介し、実践的な例を通じてその使用法を示します。

ジェネリック タイプ
ジェネリック タイプは型をパラメータ化するため、型の作成時にパラメータの型を指定できます。これは、[]Tmap[K]V などのタイプ クリエーターを使用することで実現できます。ここで、TV はそれぞれ値のタイプとキーのタイプ。

// 定义一个泛型 slice 类型
type MySlice[T any] []T

// 创建一个 MySlice[int] 实例
s := MySlice[int]{1, 2, 3}

ジェネリック関数
ジェネリック関数は型パラメーターを取ることもできますが、明示的な型パラメーター リストも指定する必要があります。

// 定义一个将切片元素加倍的泛型函数
func Double[T ~int | ~float64](s []T) []T {
  for i, v := range s {
    s[i] = v * 2
  }
  return s
}

制約
制約を使用すると、型パラメーターに型制限を指定することで、ジェネリック型の使用を制限できます。制約は、キーワード anycomparable および型インターフェイスを使用して実装されます。

// 定义一个泛型 map 类型,键值为可比较类型
type MyMap[K comparable, V any] map[K]V

// 定义一个泛型函数来查找切片中的最大值
func Max[T any](s []T) T where T: ~int | ~float64 {
  max := s[0]
  for _, v := range s {
    if v > max {
      max = v
    }
  }
  return max
}

実践的なケース
ジェネリックを使用した単純な並べ替えアルゴリズムを構築しましょう:

// 定义泛型交换函数
func Swap[T any](s []T, i, j int) {
  temp := s[i]
  s[i] = s[j]
  s[j] = temp
}

// 定义泛型排序函数
func Sort[T any](s []T) where T: ~int | ~float64 | ~string {
  for i := 0; i < len(s); i++ {
    for j := i + 1; j < len(s); j++ {
      if s[j] < s[i] {
        Swap(s, i, j)
      }
    }
  }
}

結論

ジェネリックコードの再利用と柔軟性のための強力なツールを提供します。型のパラメーター化、制約、および実際の例を理解することで、開発者はこの機能を利用して、より堅牢で汎用性の高いコードを作成できます。

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

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