我正在尝试静态分析 Go 文件。为此,我需要解析以下格式的变量:
shape.color = color.red
我需要找到所有使用点符号访问的变量。例如,我需要知道 shape 变量具有 color 属性。并且还需要颜色变量具有红色属性。 我正在尝试使用 go/ast 和 go/parser 包,但无法找到一种方法。
注意如果它是类似于 shape.color() 的东西,即一种方法,那么它不应该被计算在内
最佳答案
啊!以下代码打印了所有使用点符号访问的变量!
package main
import (
"fmt"
"go/ast"
"go/parser"
"go/token"
"log"
)
func main() {
v := visitor{}
filename := "test.go"
fset := token.NewFileSet()
f, err := parser.ParseFile(fset, filename, nil, 0)
if err != nil {
log.Fatal(err)
}
ast.Walk(&v, f)
}
type visitor struct {
}
func (v *visitor) Visit(n ast.Node) ast.Visitor {
if n == nil {
return v
}
if selectorExp, ok := n.(*ast.SelectorExpr); ok {
if x, ok := selectorExp.X.(*ast.Ident); ok {
if x.Obj == nil {
return v
}
fmt.Printf("%s.%s\n", x.Name, selectorExp.Sel.Name)
}
}
return v
}
关于parsing - 解析 Golang 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52994442/