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

我正在编写一个自定义解析器,并希望跟踪我遇到的错误。在执行 a 时如何在不使用全局变量的情况下跟踪解析过程中的错误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 不是指向结构的指针。跟踪这个的推荐方法是什么?


幕布斯7119047
浏览 91回答 1
1回答

饮歌长啸

收集结构中的错误是一种很好的方法,但您需要使用指针接收器来使其工作。func (v *visitor) Visit(n ast.Node) ast.Visitor {  // change to pointer receiver     ...}...var v visitorast.Walk(&v, astTree) // pass pointer to visitor
打开App,查看更多内容
随时随地看视频慕课网APP