GO语言"go/ast"包中"Inspect"函数的用法及代码示例。
用法:
func Inspect(node Node, f func(Node) bool)
Inspect 以深度优先顺序遍历 AST:它首先调用 f(node);节点不能为零。如果 f 返回 true,则 Inspect 为 node 的每个非 nil 子级递归调用 f,然后调用 f(nil)。
例子:
此示例演示如何检查 Go 程序的 AST。
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
})
}
输出:
src.go:2:9: p src.go:3:7: c src.go:3:11: 1.0 src.go:4:5: X src.go:4:9: f src.go:4:11: 3.14 src.go:4:17: 2 src.go:4:21: c
相关用法
- GO Index.Lookup用法及代码示例
- GO IndexByte用法及代码示例
- GO Int.Scan用法及代码示例
- GO Ints用法及代码示例
- GO Intn用法及代码示例
- GO IndexFunc用法及代码示例
- GO IndexAny用法及代码示例
- GO IndexRune用法及代码示例
- GO Index用法及代码示例
- GO Info用法及代码示例
- GO Int.SetString用法及代码示例
- GO Indent用法及代码示例
- GO IntsAreSorted用法及代码示例
- GO Itoa用法及代码示例
- GO IP.IsPrivate用法及代码示例
- GO IsDigit用法及代码示例
- GO IP.Equal用法及代码示例
- GO IsAbs用法及代码示例
- GO IP.IsLinkLocalMulticast用法及代码示例
- GO IsGraphic用法及代码示例
注:本文由纯净天空筛选整理自golang.google.cn大神的英文原创作品 Inspect。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。