> 백엔드 개발 > Golang > 기본 유형을 정의하기 위해 Go Generics에서 물결표(~) 토큰이 어떻게 작동합니까?

기본 유형을 정의하기 위해 Go Generics에서 물결표(~) 토큰이 어떻게 작동합니까?

Susan Sarandon
풀어 주다: 2024-12-13 02:16:10
원래의
702명이 탐색했습니다.

How Does the Tilde (~) Token Work in Go Generics to Define Underlying Types?

Go Generics의 물결표 토큰(~) 이해

Go Generics에서 물결표 토큰(~)은 정의하는 데 중요한 역할을 합니다. 주어진 유형의 기본 유형. 이는 T를 기본 유형으로 공유하는 유형의 컬렉션을 나타내는 ~T 형식으로 작동합니다.

이 개념은 유형에서 파생된 유형을 허용하는 제약 조건을 지정하려는 경우에 특히 유용합니다. 특정 기본 유형. 예를 들어 다음 인터페이스 제약 조건을 고려해보세요.

type Ordered interface {
    Integer | Float | ~string
}
로그인 후 복사

이 예에서 제약 조건은 정수, 부동 소수점 또는 기본 유형이 문자열인 유형인 모든 유형을 허용할 수 있는 인터페이스를 정의합니다. . 이는 사용자 정의 문자열 유형을 정의하는 MyString과 같은 유형도 기본 유형이 문자열로 유지되는 한 이 제약 조건을 충족할 수 있음을 의미합니다.

Go의 기본 유형

"기본 유형"이라는 용어는 특정 유형의 기초가 되는 기본 유형을 나타냅니다. Go에서는 유형 선언에 따라 결정됩니다. int, string, bool과 같은 기본 유형의 경우 기본 유형은 유형 자체입니다. 그러나 구조체, 슬라이스 및 인터페이스와 같은 복합 유형의 경우 기본 유형은 유형 선언에서 참조되는 유형입니다.

Tilde 토큰 사용 예시

다음 코드는 물결표 토큰의 사용을 보여줍니다.

type Foo struct {
    n int
}

type ByteSlice []byte

type MyInt8 int8

type MyString string

func echoExact[T ExactSigned](t T) T {
    // Only allows exact types, excluding MyInt8
}

func echo[T constraints.Signed](t T) T {
    // Allows types with underlying type int8, including MyInt8
}
로그인 후 복사

이 예에서는 ExactSigned는 MyInt8을 제외한 정확한 유형만 사용합니다. 반면에 Constraints.Signed는 ~int8과 같은 근사 요소를 포함하기 때문에 MyInt8을 허용합니다.

참고: Tilde 토큰의 제한 사항

물결표 토큰은 유형 매개변수와 함께 사용할 수 없습니다. 예를 들어 다음 코드는 유효하지 않습니다.

type AnyApprox[T any] interface {
    ~T
}
로그인 후 복사

위 내용은 기본 유형을 정의하기 위해 Go Generics에서 물결표(~) 토큰이 어떻게 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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