我正在编写一个迭代 AST(抽象语法树)的程序。当我执行以下代码时:
val := reflect.Indirect(reflect.ValueOf(currStatement))
for i := 0; i < val.NumField(); i++ {
varName := val.Type().Field(i).Name
varType := val.Type().Field(i).Type
varValue := val.Field(i).Interface()
if (varName == "Body") {
fmt.Printf("%v %v %v\n", varName,varType,varValue)
}
}
fmt.Println()
我得到以下输出:
Body *ast.BlockStmt &{2795 [0xc0001044c0] 2867}
这表明val.Field(i).Interface()是 type *ast.BlockStmt。但是,根据此处的文档(https://pkg.go.dev/go/ast#BlockStmt):

很明显,BlockStmt有属性List。但是,当我在循环中运行以下代码行for以提取属性的值时List(我最终将对其进行迭代):
fmt.Printf("%v %v %v\n", varName,varType,varValue.List)我收到以下错误:
varValue.List undefined (type interface {} is interface with no methods)
跃然一笑
倚天杖
随时随地看视频慕课网APP
相关分类