当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


GO Inspect用法及代码示例


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

相关用法


注:本文由纯净天空筛选整理自golang.google.cn大神的英文原创作品 Inspect。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。