初级会员
  • 第 10237 位会员
  • hahajie
  • 2017-07-23 13:03:52
  • Offline
  • 19 88

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • I got it myself. ``` package main import ( "fmt" "os" "reflect" "text/template" ) func getByKey(data interface{}, keys ...string) interface{} { defer func() { err := recover() if err != nil { fmt.Println(err) } }() for _, k := range keys { rdata := reflect.ValueOf(data) switch rdata.Kind() { case reflect.Map: mdata := data.(map[string]ZkNode) data = mdata[k] case reflect.Ptr: data = rdata.Elem().FieldByName(k).Interface() default: data = rdata.FieldByName(k).Interface() } } 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) } } ```
  • 不要质疑需求,能否实现才体现能力。
  • #1 @channel 明白了,谢谢