为了账号安全,请及时绑定邮箱和手机立即绑定

Go:尽管文档中存在接口的属性但未定义

Go:尽管文档中存在接口的属性但未定义

Go
跃然一笑 2022-10-31 15:40:49
我正在编写一个迭代 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)
查看完整描述

1 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

varValueinterface{}指向BlockStmt实例的类型。您必须使用类型断言来从中获取BlockStmt

blk:=varValue.(*ast.BlockStmt)

然后就可以访问了blk.List


查看完整回答
反对 回复 2022-10-31
  • 1 回答
  • 0 关注
  • 124 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号