反射struct中的struct得到<invalid reflect.Value>?

hahajie · · 108 次点击 · 开始浏览   
下面代码希望自定义一个template函数,函数返回值TF,结果却得到了<invalid reflect.Value>错误,求解。 ``` package main import ( "fmt" "os" "reflect" "text/template" ) func getByKey(data interface{}, keys ...string) interface{} { var rdata reflect.Value for _, k := range keys { rdata = reflect.ValueOf(data) switch rdata.Kind() { case reflect.Map: mdata := data.(map[string]ZkNode) data = mdata[k] default: data = rdata.FieldByName(k) } } return data } type ZkNode struct { Value interface{} Key string Zz interface{} } func main() { data := make(map[string]ZkNode) data["test1"] = ZkNode{ Value: "123", Key: "test1_key", } data["test2"] = ZkNode{ Value: "456", Key: "test2_key", Zz: &ZkNode{ Value: "TF", Key: "aaa", }, } tmplStr := ` begin {{D . "test2" "Zz" "Value" }} end ` tmpl, err := template.New("myt").Funcs(template.FuncMap{"D": getByKey}).Parse(tmplStr) if err != nil { fmt.Println(err) } err = tmpl.Execute(os.Stdout, data) if err != nil { fmt.Println(err) } } ```
108 次点击  
加入收藏 微博
2 回复  |  直到 2017-07-24 22:39:07
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传