跟踪 Go 中的 ast.Walk() 解析错误

Keep track of ast.Walk() parsing errors in Go

我正在编写一个自定义解析器,并希望跟踪我遇到的错误。在执行 ast.Walk 时如何在不使用全局变量的情况下跟踪解析期间的错误?

type visitor struct {
    err error
}

func (v visitor) Visit(n ast.Node) ast.Visitor {
    switch d := n.(type) {
    case *ast.BinaryExpr:
        if d.Op != token.LAND {
            v.err = fmt.Errorf("Illegal operator :%s", d.Op) // NOT WORKING
                return v
        }
    }
    return v
}

我使用上面的代码作为:-

var v visitor
ast.Walk(v, astTree)

这可能不起作用,因为在 func (v visitor) 中,v 不是指向结构的指针。推荐的跟踪方式是什么?

收集结构中的错误是一个好方法,但您需要使用指针接收器才能使其工作。

func (v *visitor) Visit(n ast.Node) ast.Visitor {  // change to pointer receiver
     ...
}

...

var v visitor
ast.Walk(&v, astTree) // pass pointer to visitor