Go에서 유니온은 두 가지 주요 목적을 제공합니다:
그러나 이것이 중요합니다. 공용체는 인터페이스 제약 조건에서만 사용할 수 있습니다. tt와 같이 일반 유형으로 사용하려고 합니다. := []testDifference[intOrString]은 지원되지 않습니다.
또한 슬라이스와 같은 일반 컨테이너는 다양한 유형의 항목을 담을 수 없습니다. 테스트 슬라이스에는 testDifference[int] 및 testDifference[string], 이러한 구체적인 인스턴스화는 다른 유형입니다.
이 문제를 해결하려면 각 유형에 대해 별도의 슬라이스를 사용할 수 있습니다. (ttInts 및 ttStrs) 또는 모든 항목을 인터페이스([]interface{})로 저장합니다.
Union 제약 조건에 대한 작업은 유형 집합의 모든 유형에서 지원하는 작업으로 제한됩니다. int의 경우 | 문자열에는 변수 선언, 변환, 비교, 순서 지정 및 연산자가 포함됩니다.
예:
type intOrString interface { int | string } func beforeIntOrString[T intOrString](a, b T) bool { return a < b } func sumIntOrString[T intOrString](a, b T) T { return a + b } func main() { fmt.Println(beforeIntOrString("foo", "bar")) // false fmt.Println(beforeIntOrString(4, 5)) // true fmt.Println(sumIntOrString("foo", "bar")) // foobar fmt.Println(sumIntOrString(10, 5)) // 15 }
이 예에서 beforeSendIntOrString 및 sumIntOrString은 일반 함수입니다. 이는 각각 int 및 문자열 값으로 작동합니다.
위 내용은 Go Generics는 유형 제약 조건 및 컨테이너의 공용체와 제한 사항을 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!