> 백엔드 개발 > Golang > Go Generics에서 Tilde 토큰(~)을 어떻게 사용하나요?

Go Generics에서 Tilde 토큰(~)을 어떻게 사용하나요?

Barbara Streisand
풀어 주다: 2024-12-26 10:59:09
원래의
270명이 탐색했습니다.

What is the Use of the Tilde Token (~) in Go Generics?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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