Union Slices에 대한 일반 반복 공개("T에는 핵심 유형이 없습니다" 문제 해결)
Go의 제네릭 탐색이 계속됩니다. 이번에는 흥미로운 도전: 슬라이스의 합집합을 반복하는 것입니다. 우리의 목표는 정수 조각과 부동 소수점 조각을 모두 처리한 다음 그 내용을 합산할 수 있는 일반 함수를 만드는 것입니다.
초기 시도에 장애물이 발생했습니다.
type NumberSlice interface { []int64 | []float64 } func add[N NumberSlice](n N) { for _, v := range n { fmt.Println(v) } }
오류 "n(NumberSlice에 의해 제한된 유형의 변수)을 초과할 수 없습니다(N에는 핵심 유형이 없음)." 이 오류는 일반 인터페이스 제약 조건에 대한 핵심 유형이 부족하기 때문에 발생합니다.
핵심 유형을 이해하는 것이 중요합니다. 인터페이스의 유형 집합이 단일 기본 유형을 가지거나 동일한 요소 유형을 갖는 채널 유형과 동일한 방향을 갖는 방향성 채널로만 구성된 경우 핵심 유형이 존재합니다. 안타깝게도 인터페이스 제약 조건은 두 가지 기본 유형인 []int64 및 []float64로 인해 이러한 조건을 충족하지 않습니다.
이 문제를 해결하려면 기본 유형을 요구하고 슬라이스를 전달하도록 인터페이스를 재정의하면 됩니다. 기본 유형을 함수 인수로 사용:
type Number interface { int64 | float64 } func add[N Number](n []N) { for _, v := range n { fmt.Println(v) } }
또는 특수한 NumberSlice 유형을 사용하여 보다 장황한 접근 방식을 사용할 수 있습니다. 매개변수:
type NumberSlice[N int64 | float64] interface { ~[]N } func add[S NumberSlice[N], N int64 | float64](n S) { for _, v := range n { fmt.Println(v) } }
이러한 기술을 활용하면 공용체 슬라이스를 효과적으로 반복하고 일반 함수에서 원하는 작업을 수행할 수 있습니다.
위 내용은 Go Generics에서 유니온 슬라이스를 반복하고 'T에는 코어 유형이 없습니다' 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!