Golang 제네릭은 함수 유형 추론에 어떤 영향을 미치나요?

WBOY
풀어 주다: 2024-04-16 11:45:01
원래의
1159명이 탐색했습니다.

Go 제네릭은 유형 매개변수화를 도입하여 함수 유형 추론을 변경합니다. 매개변수 유형: []A, 여기서 A는 숫자 인터페이스를 충족하고 호출 시 구체화되는 실제 유형 매개변수입니다. 반환 값 유형: 매개변수 유형과 동일하며 A로 추론됩니다.

Golang 제네릭은 함수 유형 추론에 어떤 영향을 미치나요?

Go 제네릭이 함수 유형 추론에 미치는 영향

Go 언어의 제네릭은 함수 유형 추론이 수행되는 방식에 영향을 미치는 새로운 유형 추론 메커니즘을 도입합니다. Go 제네릭을 올바르게 사용하려면 이러한 변경 사항을 이해하는 것이 중요합니다.

전통적인 유형 추론

Go 제네릭 이전에는 함수 유형 추론이 컨텍스트의 유형 정보를 기반으로 했습니다. 예를 들어, 다음 함수

func SumNumbers(numbers []int) int {
  sum := 0
  for _, number := range numbers {
    sum += number
  }
  return sum
}
로그인 후 복사

SumNumbers의 인수 유형이 []int이고 반환 값 유형이 int라고 추론합니다. . 이는 range 문의 number 변수가 int 유형이고 sum 변수가 < 유형이기 때문입니다. 코드> 정수. SumNumbers 的参数类型为 []int,返回值类型为 int。这是因为 range 语句中的 number 变量具有类型 int,而 sum 变量是类型的 int

泛型中的类型推断

Go 泛型引入了一层额外的类型参数化,这改变了函数类型推断的方式。考虑以下泛型函数:

func Sum[T number](numbers []T) T {
  sum := zero[T]()
  for _, number := range numbers {
    sum += number
  }
  return sum
}
로그인 후 복사

现在,Sum 函数具有一个类型参数 T,指示类型 T 应该是数字类型,也就是说,它必须实现 number 接口。在这种情况下,函数类型推断如下:

  • 函数参数类型:[]A,其中 A 是满足 number 接口的实际类型参数(在调用时具体化)。
  • 函数返回值类型:A,与函数参数类型相同。

实战案例

以下是使用 Sum 泛型函数的示例:

// 求和整型数组
sum := Sum([]int{1, 2, 3}) // 推断 T 为 int

// 求和浮点型数组
sumF := Sum([]float64{1.2, 2.3, 3.4}) // 推断 T 为 float64
로그인 후 복사

正如你所看到的,Sum

🎜제네릭의 유형 추론 🎜🎜🎜Go Generics는 유형 매개변수화의 추가 계층을 도입하여 함수 유형 추론이 수행되는 방식을 변경합니다. 다음 일반 함수를 고려해 보세요. 🎜rrreee🎜이제 Sum 함수에는 T 유형이 숫자 유형이어야 함을 나타내는 유형 매개변수 T가 있습니다. , 즉 number 인터페이스를 구현해야 합니다. 이 경우 함수 유형은 다음과 같이 추론됩니다. 🎜
  • 함수 매개변수 유형: []A, 여기서 A숫자를 충족합니다. code> code> 인터페이스의 실제 유형 매개변수입니다(호출 시 구체화됨).
  • 함수 반환 값 유형: A, 이는 함수 매개변수 유형과 동일합니다.
🎜🎜실제 사례🎜🎜🎜다음은 Sum 일반 함수를 사용하는 예입니다. 🎜rrreee🎜보시다시피 Sum 일반 함수는 호출 시 실제 유형 매개변수를 기반으로 유형 추론을 수행할 수 있습니다. 🎜

위 내용은 Golang 제네릭은 함수 유형 추론에 어떤 영향을 미치나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿