Dev/Go

golang ~ string 의미

catchv 2025. 6. 25. 11:16
반응형

Go 언어에서 `type E interface { ~string }`와 같이 `~`(틸드) 기호가 붙은 형태는 **타입 집합(type set)**을 정의할 때 사용되는 문법입니다. 여기서 `~string`의 의미는 “기본 타입이 string인 모든 타입”을 의미합니다.
즉,
• `~string`은 string 타입을 기반으로 만들어진 모든 사용자 정의 타입까지 포함합니다.
• 예를 들어,

 

type MyString string

 

• 처럼 `MyString`이 `string`을 기반으로 정의되었다면, `MyString`도 `~string`에 포함됩니다.
이 문법은 Go 1.18부터 도입된 제네릭(generics) 및 **타입 제약(type constraints)**에서 주로 사용됩니다.
• `interface { ~string }`은 “string이거나 string을 기반으로 한 타입”만을 허용하는 제네릭 타입 제약을 의미합니다.
정리하면,
• `~T`는 “기본 타입(underlying type)이 T인 모든 타입”을 의미합니다.
• `interface { ~string }`은 “string과 string을 기반으로 한 모든 타입”을 제약합니다.
이 문법은 연산자나 산술 연산과는 관련이 없으며, 타입 제약에서만 사용됩니다.
(검색 결과에는 직접적인 설명이 없으나, Go 공식 문서와 제네릭 타입 제약에 대한 일반적인 설명을 바탕으로 작성하였습니다.)

 

`constraints.Ordered`는 Go 언어에서 제네릭 타입 파라미터의 **타입 제약(type constraint)**으로 사용되는 인터페이스입니다. 이 제약은 “비교 연산자 `<`, `<=`, `>`, `>=`를 사용할 수 있는 타입”만 허용합니다.

 

func Min[T constraints.Ordered](x, y T) T {
    if x < y {
        return x
    }
    return y
}

 

type Ordered interface {
    Integer | Float | ~string
}

반응형