go / expert
Snippet
Programmatische AST-Modifikation und Code-Inspektion mittels Go-Parser
Die Go-Standardpakete `go/parser` und `go/ast` ermöglichen das Parsen von Go-Quellcode in einen abstrakten Syntaxbaum (AST). Entwickler können Knotenhierarchien mittels `ast.Inspect` durchlaufen, um eigene Linter, Codegeneratoren oder statische Analysetools zu erstellen.
snippet.go
go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package mainimport ("fmt""go/ast""go/parser""go/token")func main() {fset := token.NewFileSet()src := `package sample; func Compute(x int) int { return x + 42 }`node, err := parser.ParseFile(fset, "", src, 0)if err != nil {panic(err)}ast.Inspect(node, func(n ast.Node) bool {if fn, ok := n.(*ast.FuncDecl); ok {fmt.Printf("Discovered function declaration: %s\n", fn.Name.Name)}return true})}
Erklärung
1
fset := token.NewFileSet()
Initialisiert ein Position-Token-Set zur Nachverfolgung von Quellcode-Offsets während des AST-Parsings.
2
node, err := parser.ParseFile(fset, "", src, 0)
Analysiert den rohen Go-Quelltext-String und erzeugt einen strukturierten abstrakten Syntaxbaum (AST).
3
ast.Inspect(node, func(n ast.Node) bool {
Traversiert AST-Knoten in Tiefensuche und filtert gezielt nach funktionellen Deklarationsstrukturen.