Skip to content

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))
}
}
}