[go] go/types 패키지로 가능한 타입 검사 예시들

go/types 패키지는 Go 프로그램의 타입 정보를 다루고 이를 검사할 수 있는 기능을 제공합니다. 이번 블로그에서는 go/types 패키지를 사용해서 가능한 타입 검사 예시들에 대해 소개하겠습니다.

1. 타입이 동일한지 확인하기

package main

import (
	"fmt"
	"go/types"
)

func main() {
	var a int
	var b int32
	fmt.Println(types.Identical(a, b)) // false
}

위 예제에서는 Identical 함수를 사용하여 intint32가 동일한 타입인지 확인합니다. false가 출력되므로 두 타입은 서로 다른 것으로 판단됩니다.

2. 타입의 구체성 검사하기

package main

import (
	"fmt"
	"go/types"
)

func main() {
	var a interface{}
	var b string
	fmt.Println(types.AssignableTo(b, a))  // true
}

위 코드에서는 AssignableTo 함수를 사용하여 string 타입이 interface{} 타입에 할당 가능한지 검사합니다. true가 출력되어 string 타입이 interface{} 타입에 할당 가능하다고 판단됩니다.

3. 타입의 호환성 검사하기

package main

import (
	"fmt"
	"go/types"
)

func main() {
	var a chan int
	var b chan bool
	fmt.Println(types.Compatible(a, b))  // false
}

위 코드에서는 Compatible 함수를 사용하여 chan intchan bool이 호환 가능한지를 검사합니다. false가 출력되므로 두 타입이 호환되지 않는 것으로 판단됩니다.

go/types 패키지를 사용하면 타입 정보를 쉽게 다루고 검사할 수 있습니다. 내부적으로 Go 프로그램의 타입 시스템에 대해 더 깊이 이해하고자 하는 경우에 유용하게 사용할 수 있습니다.

더 많은 정보 및 예제는 Go 공식 문서를 참고할 수 있습니다.