인터페이스 제약 조건이 있는 일반 함수의 슬라이스 합집합 처리
정수 슬라이스 또는 정수 슬라이스에서 작동하는 일반 함수가 필요하다고 가정해 보겠습니다. 수레 조각. 이를 구현하려면 아래와 같이 제네릭 및 인터페이스 제약 조건을 활용할 수 있습니다.
package main import "fmt" // NumberSlice defines an interface for either slice of integers or slice of floats. type NumberSlice interface { []int | []float64 } // add is a generic function that iterates over a slice of NumberSlice and prints its values. func add[N NumberSlice](n N) { for _, v := range n { fmt.Println(v) } } func main() { ints := []int{1, 2} add(ints) floats := []float64{3.14, 1.618} add(floats) }
그러나 위 코드를 실행하려고 하면 다음 오류가 발생할 수 있습니다.
cannot range over n (variable of type N constrained by NumberSlice) (N has no core type)
이 오류는 NumberSlice 인터페이스에 핵심 유형이 없기 때문에 발생합니다. 인터페이스의 핵심 유형은 인터페이스의 모든 유형이 상속해야 하는 단일 기본 유형입니다. NumberSlice는 정수 슬라이스와 부동 소수점 슬라이스를 모두 허용하므로 이 요구 사항을 충족하지 않습니다.
이 문제를 해결하려면 슬라이스 대신 기본 유형을 사용하여 인터페이스를 정의할 수 있습니다.
type Number interface { int | float64 } func add[N Number](n []N) { for _, v := range n { fmt.Println(v) } }
이 수정된 함수는 Number 요소 조각을 매개변수로 사용하여 정수와 부동소수점을 모두 효율적으로 처리할 수 있게 해줍니다.
위 내용은 Go 일반 함수에서 슬라이스 결합을 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!