Golang go/ast.Inspect() function examples
package go/ast
Inspect traverses an AST in depth-first order: It starts by calling f(node); node must not be nil. If f returns true, Inspect invokes f for all the non-nil children of node, recursively.
Golang go/ast.Inspect() function usage examples
Example 1:
type fieldInfo struct {
Name string
IsBasic bool // handled by one the native Read/WriteUint64 etc functions
IsSlice bool // field is a slice of FieldType
FieldType string // original type of field, i.e. "int"
Encoder string // the encoder name, i.e. "Uint64" for Read/WriteUint64
Convert string // what to convert to when encoding, i.e. "uint64"
Max int // max size for slices and strings
}
type structInfo struct {
Name string
Fields []fieldInfo
}
func inspector(structs *[]structInfo) func(ast.Node) bool {
return func(n ast.Node) bool {
switch n := n.(type) {
case *ast.TypeSpec:
switch t := n.Type.(type) {
case *ast.StructType:
name := n.Name.Name
fs := handleStruct(t)
*structs = append(*structs, structInfo{name, fs})
}
return false
default:
return true
}
}
}
func main() {
flag.Parse()
fname := flag.Arg(0)
fset := token.NewFileSet()
f, err := parser.ParseFile(fset, fname, nil, parser.ParseComments)
if err != nil {
panic(err)
}
var structs []structInfo
i := inspector(&structs)
ast.Inspect(f, i) // <--- here
...
}
Example 2:(from http://golang.org/pkg/go/ast/#Inspect )
package main
import (
"fmt"
"go/ast"
"go/parser"
"go/token"
)
func main() {
// src is the input for which we want to inspect the AST.
src := `
package p
const c = 1.0
var X = f(3.14)*2 + c
`
// Create the AST by parsing src.
fset := token.NewFileSet() // positions are relative to fset
f, err := parser.ParseFile(fset, "src.go", src, 0)
if err != nil {
panic(err)
}
// Inspect the AST and print all identifiers and literals.
ast.Inspect(f, func(n ast.Node) bool {
var s string
switch x := n.(type) {
case *ast.BasicLit:
s = x.Value
case *ast.Ident:
s = x.Name
}
if s != "" {
fmt.Printf("%s:\t%s\n", fset.Position(n.Pos()), s)
}
return true
})
}
References :
Advertisement
Something interesting
Tutorials
+8.8k Golang : Gorilla web tool kit schema example
+9.4k Facebook : Getting the friends list with PHP return JSON format
+18.6k Golang : Find IP address from string
+5.2k Golang : Experimental Jawi programming language
+8.8k Golang : Executing and evaluating nested loop in html template
+7.5k Gogland : Single File versus Go Application Run Configurations
+36.3k Golang : How to split or chunking a file to smaller pieces?
+43.3k Golang : Convert []byte to image
+21.2k Golang : Get password from console input without echo or masked
+18k Golang : Get all upper case or lower case characters from string example
+14.6k Golang : Send email with attachment(RFC2822) using Gmail API example
+9.9k Golang : Turn string or text file into slice example