跟踪 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
我正在编写一个自定义解析器,并希望跟踪我遇到的错误。在执行 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