[go] go/types 패키지의 타입 추론 예시

이번 포스트에서는 go/types 패키지를 사용하여 Go 프로그램에서 타입을 추론하는 방법에 대해 알아보겠습니다.

1. go/types 패키지란?

go/types 패키지는 Go 언어의 타입과 관련된 다양한 기능을 제공하는 패키지입니다. 이 패키지를 사용하면 프로그램에서 변수, 함수, 구조체 등의 타입을 확인하거나 추론할 수 있습니다.

2. 타입 추론의 예시

아래 예시 코드를 통해 go/types 패키지를 사용하여 타입을 추론하는 방법을 살펴보겠습니다.

package main

import (
	"fmt"
	"go/types"
	"go/importer"
	"go/token"
)

func main() {
	code := `
package main

import "fmt"

func main() {
    var x = 10
    fmt.Println(x)
}
`

	fset := token.NewFileSet()
	file, _ := types.NewParser(fset, token.FileSet, nil, 0).ParseFile("main.go", code, 0)
	conf := types.Config{Importer: importer.Default()}
	info := &types.Info{Types: make(map[types.Expr]types.TypeAndValue)}
	_ = conf.Check("main", fset, []*types.Package{types.NewPackage("main", "main")}, info, file)

	x := file.Scope.Lookup("x")
	fmt.Println("Type of x:", info.Types[x].Type)
}

위 코드에서는 go/types 패키지를 사용하여 소스 코드를 파싱하고 타입 정보를 추론하여 출력합니다. types.Info 구조체를 사용하여 각 식별자의 타입 정보를 확인할 수 있습니다.

3. 결론

이렇게 go/types 패키지를 사용하여 타입을 추론할 수 있습니다. 이 패키지를 활용하면 프로그램의 변수, 함수 등의 타입을 확인하고 분석하는 데 유용합니다.

더 많은 정보를 원하시면 go/types 공식 문서를 참고하시기 바랍니다.