Skip to main content

Go Template 自定义函数

Go html template 自定义函数

func GeoListGet(w http.ResponseWriter, r *http.Request) {  
    tpl := template.New("main_parent.html")
    selfunc := make(template.FuncMap)
    selfunc["calNumber"] = CalNumbers
    tpl = tpl.Funcs(selfunc)
    var err error
    tpl, err = tpl.ParseFiles(fmt.Sprintf("%vparent/main_parent.html", conf.TmpPath), fmt.Sprintf("%vgeo/index.html", conf.TmpPath))
    if err != nil {
        log.Println(err)
        return
    }

    ret, err := mysql.GetTargetList()
    if err != nil {
        log.Println(err)
        return
    }

    dataT := struct {
        ActiveMenu string
        ActiveSub  string
        TargetList []datatype.XcTargetInfo
    }{
        ActiveMenu: "Targeting Manager",
        ActiveSub:  "Targeting & Bid List",
        TargetList: ret,
    }

    if err := tpl.Execute(w, dataT); err != nil {
        log.Println(err)
    }
}
func CalNumbers(l []string) string {  
    return fmt.Sprintf("%v", len(l))
}

需要注意的是New的Name需要和ParseFiles中第一个Template的文件名一致,否则会报 template incompelete错误。
其次,函数的注入需要在ParseFiles之前