> 백엔드 개발 > Golang > Go Generics는 유형 제약 조건 및 컨테이너의 공용체와 제한 사항을 어떻게 처리합니까?

Go Generics는 유형 제약 조건 및 컨테이너의 공용체와 제한 사항을 어떻게 처리합니까?

DDD
풀어 주다: 2024-12-26 21:51:14
원래의
605명이 탐색했습니다.

How Do Go Generics Handle Unions and Their Limitations in Type Constraints and Containers?

Go Generics - 유니온과 그 한계

Go에서 유니온은 두 가지 주요 목적을 제공합니다:

  1. 인터페이스 제약 조건: 공용체를 사용하면 일반 유형 매개변수를 특정 유형의 매개변수 세트로 제한할 수 있습니다. 유형.
  2. 대략적인 요소 포함: 공용체에 ~ 기호를 사용하면 다른 호환 가능한 유형이 포함될 수 있음을 나타냅니다.

그러나 이것이 중요합니다. 공용체는 인터페이스 제약 조건에서만 사용할 수 있습니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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