go/parser

Guided tour · Go Tooling · pkg.go.dev →

Parse Go source code into an AST. Starting point for any static analysis.

Parse files

Single file

fset := token.NewFileSet()
file, err := parser.ParseFile(fset, "main.go", nil, parser.ParseComments)
if err != nil { log.Fatal(err) }

Whole directory

pkgs, err := parser.ParseDir(fset, ".", nil, 0)
for name, pkg := range pkgs { fmt.Println(name, len(pkg.Files)) }

From source string

file, _ := parser.ParseFile(fset, "", "package p; var X = 1", 0)

Parse just an expression

ParseExpr

expr, err := parser.ParseExpr("a + b*2")
// returns *ast.BinaryExpr