Go 제네릭은 유형 매개변수화를 도입하여 함수 유형 추론을 변경합니다. 매개변수 유형: []A, 여기서 A는 숫자 인터페이스를 충족하고 호출 시 구체화되는 실제 유형 매개변수입니다. 반환 값 유형: 매개변수 유형과 동일하며 A로 추론됩니다.
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
Sum
함수에는 T
유형이 숫자 유형이어야 함을 나타내는 유형 매개변수 T
가 있습니다. , 즉 number
인터페이스를 구현해야 합니다. 이 경우 함수 유형은 다음과 같이 추론됩니다. 🎜[]A
, 여기서 A
는 숫자를 충족합니다. code> code> 인터페이스의 실제 유형 매개변수입니다(호출 시 구체화됨).
A
, 이는 함수 매개변수 유형과 동일합니다. Sum
일반 함수를 사용하는 예입니다. 🎜rrreee🎜보시다시피 Sum
일반 함수는 호출 시 실제 유형 매개변수를 기반으로 유형 추론을 수행할 수 있습니다. 🎜위 내용은 Golang 제네릭은 함수 유형 추론에 어떤 영향을 미치나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!