Go Generics의 물결표 토큰(~) 이해
Go의 물결표 토큰(~) 도입으로 Generic에 새로운 차원이 도입되었습니다. 프로그램 작성. 이 토큰을 사용하면 개발자는 공통 기본 유형을 공유하는 유형을 정의할 수 있습니다.
물결표 토큰이란 무엇인가요?
Go에서 물결표 토큰(~)은 집합을 의미합니다. 기본 유형이 T인 모든 유형입니다. 예를 들어 ~T는 기본 유형이 T인 모든 유형을 나타냅니다.
왜 유용합니까?
물결표 토큰은 특정 기본 유형이 있는 유형을 허용할 수 있는 일반 인터페이스를 정의하는 유연한 방법을 제공합니다. 예를 들어 Ordered 인터페이스는 다음과 같이 정의할 수 있습니다.
type Ordered interface { Integer | Float | ~string }
이 인터페이스는 유형이 정수, 부동 또는 기본 유형이 문자열인 유형이어야 함을 지정합니다. 이를 통해 MyString과 같은 기본 문자열 유형이 있는 사용자 정의 유형이 이 인터페이스를 충족할 수 있습니다.
기본 유형
기본 유형의 개념은 물결표를 이해하는 데 중요합니다. 토큰. T 유형의 기본 유형은 일반적으로 T 자체입니다. 단, 다음은 제외됩니다.
실용 예
물결표 토큰을 사용하면 특정 인터페이스를 만족할 수 있는 유형을 제한하는 제약 조건을 만들 수 있습니다. 예를 들어, 정확히 int, int8, int16, int32 또는 int64인 유형만 허용하도록 ExactSigned라는 제약 조건을 정의할 수 있습니다. 이러한 제약 조건은 MyInt8과 같은 사용자 지정 유형을 허용하지 않습니다.
반면, Constraints.Signed라는 제약 조건은 ~ 근사 요소를 사용하여 기본 유형이 int8인 유형을 허용합니다. 이를 통해 MyInt8과 같은 사용자 정의 유형이 제약 조건을 충족할 수 있습니다.
Syntactic Sugar
물결표 토큰은 공용체, 익명 제약 조건 및 심지어 구문 설탕과 함께 사용할 수 있습니다. 특히 단일 유형의 근사 요소를 사용하여 쓰기 제약 조건을 단순화할 수 있습니다.
예를 들어 다음 익명 제약 조건은 동일합니다.
func echoFixedSize[T interface { ~int8 | ~int32 | ~int64 }](t T) { /* ... */ } func echoFixedSizeSugar[T ~int8 | ~int32 | ~int64](t T) { /* ... */ } func echoFixedSizeSugarOne[T ~int8](t T) { /* ... */ }
일반적인 사용 사례
근사 요소는 메소드가 필요한 복합 유형 작업에 특히 유용합니다. 예를 들어, ByteSeq 유형에 대해 메서드를 선언하려면 해당 기본 유형이 식별자에 바인딩되어야 합니다.
type ByteSeq []byte func (b ByteSeq) DoSomething() {}
제약 조건에 ~[]byte를 지정하면 ByteSeq를 인스턴스화하는 것이 가능해집니다. 유효한 유형으로 사용됩니다.
제한사항
다음이 중요합니다. 물결표 토큰은 유형 매개변수와 함께 사용할 수 없습니다. 예를 들어 다음 코드는 유효하지 않습니다.
type AnyApprox[T any] interface { ~T }
위 내용은 Go Generics에서 Tilde 토큰(~)을 어떻게 사용하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!