>  기사  >  백엔드 개발  >  Golang 제네릭의 핵심 개념 이해

Golang 제네릭의 핵심 개념 이해

WBOY
WBOY원래의
2024-04-03 12:18:01493검색

Go 제네릭을 사용하면 코드 자체를 수정하지 않고도 재사용 가능한 유형과 함수를 만들 수 있습니다. 여기에는 다음이 포함됩니다: 일반 유형: 유형 매개변수를 사용하여 유형을 생성할 때 매개변수 유형을 지정할 수 있습니다(예: []T, map[K]V). 일반 함수: 유형 매개변수를 사용할 때 명시적인 유형 매개변수 목록을 지정해야 합니다. 제약 조건: 유형 매개변수에 대한 유형 제한을 지정하려면 any, Comparable 및 유형 인터페이스 키워드를 사용하십시오. 이러한 개념을 사용하면 일반 정렬 알고리즘과 같이 보다 강력하고 범용적인 코드를 생성할 수 있습니다.

Golang 제네릭의 핵심 개념 이해

Golang 제네릭의 핵심 개념 이해하기

머리말
제네릭은 Go 1.18에 도입된 중요한 새로운 기능으로, 코드 자체와 함수를 수정하지 않고도 재사용 가능한 유형을 만들 수 있습니다. 이 튜토리얼에서는 Go의 제네릭의 핵심 개념을 소개하고 실제 예제를 통해 사용법을 보여줍니다.

일반 유형
일반 유형은 유형을 매개변수화하므로 유형을 생성할 때 매개변수 유형을 지정할 수 있습니다. 이는 []T 또는 map[K]V와 같은 유형 생성기를 사용하여 달성할 수 있습니다. 여기서 TV code>는 각각 값 유형과 키 유형입니다. <code>[]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)
      }
    }
  }
}

Constraints제약 조건을 사용하면 유형 매개변수에 유형 제한을 지정하여 일반 유형의 사용을 제한할 수 있습니다. 제약 조건은 키워드 any, comparable 및 유형 인터페이스를 사용하여 구현됩니다.

rrreee

실용 예🎜🎜제네릭을 사용하여 간단한 정렬 알고리즘을 구축해 보겠습니다. 🎜rrreee🎜🎜결론🎜🎜🎜Go의 Generics는 코드 재사용 및 유연성을 위한 강력한 도구를 제공합니다. 유형 매개변수화, 제약 조건 및 실제 예제를 이해함으로써 개발자는 이 기능을 활용하여 더욱 강력하고 다양한 코드를 작성할 수 있습니다. 🎜

위 내용은 Golang 제네릭의 핵심 개념 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.