[go] go/types 패키지를 사용한 코드 예시

Go 언어의 go/types 패키지는 Go 소스 코드의 타입 정보를 분석하고 검색할 수 있는 기능을 제공합니다. 이 패키지를 사용하면 소스 코드에 있는 식별자(identifier)의 타입 정보를 손쉽게 가져올 수 있습니다.

다음은 go/types 패키지를 사용하여 소스 코드 내의 함수의 반환 타입을 가져오는 간단한 예시 코드입니다.

package main

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

func main() {
	src := `
package main
func add(a, b int) int {
	return a + b
}
`
	fset := token.NewFileSet()
	f, err := parser.ParseFile(fset, "src.go", src, 0)
	if err != nil {
		fmt.Println(err)
		return
	}
	conf := types.Config{Importer: importer.Default()}
	_, err = conf.Check("cmd/hello", fset, []*types.Package{f.Name}, nil)
	if err != nil {
		fmt.Println(err)
		return
	}
	obj := f.Scope.Lookup("add")
	if obj == nil {
		fmt.Println("function not found")
		return
	}
	fmt.Println(obj.Type().(*types.Signature).Results().At(0).Type())
}

위 코드를 실행하면 add 함수의 반환 타입을 출력하여 확인할 수 있습니다. 위 코드는 go/types 패키지를 이용하여 간단하게 Go 소스 코드의 함수 타입 정보를 가져오는 방법을 보여줍니다.

더 많은 go/types 패키지의 기능과 활용 방법에 대한 정보는 공식 Go언어 웹사이트 Go 언어 사이트에서 확인할 수 있습니다.