Goで静的解析する際のテンプレート(packages版)
This content is a draft and will not be included in production builds.
Goで静的解析する際のテンプレート(loader版)やGoで静的解析する際のテンプレート(標準版)もあるけれど、今なら packages を使う方が良いらしい。
Goの3ドット記法はx/tools/go/packagesで対応できるので、loader と比べても優位性はある。
//go:build ignore
package main
import ( "go/types" "fmt" "log"
"golang.org/x/tools/go/packages")
func main() { log.SetFlags(0) log.SetPrefix("generate: ")
c := &packages.Config{Mode: packages.NeedTypes|packages.NeedSyntax} pkgs, err := packages.Load(c, ".") if err != nil { log.Fatalln(err) } if packages.PrintErrors(pkgs) > 0 { log.Fatalln("too many errors") } for _, pkg := range pkgs { t := pkg.Types.Scope().Lookup("URL").Type().(*types.Named) for i := range t.NumMethods() { fmt.Println(t.Method(i)) } }}