template包(HTML/template)实现了数据驱动的模板,用于生成可对抗代码注入的安全HTML输出。本包提供了和text/template包相同的接口,无论何时当输出是HTML的时候都应使用本包。
main.go
package mainimport ( "HTML/template" "io/IoUtil" "os" "time" "fmt")func main() { t := template.New("第一个模板").Delims("[[","]]") //创建一个模板,设置模板边界 t,_ = t.Parse("hello,[[.Username]]\n") //解析模板文件 data := map[string]interface{}{"Username": template.HTML("<script>alert('you have been pwned')</script>")} t.Execute(os.Stdout,data) //执行模板的merger *** 作,并输出到控制台 t2 := template.New("新的模板") //创建模板 t2.Funcs(map[string]interface{}{"tihuan": tihuan}) //向模板中注入函数 bytes,_ := IoUtil.Readfile("test2.HTML") //读文件 template.Must(t2.Parse(string(bytes))) //将字符串读作模板 t2.Execute(os.Stdout,map[string]interface{}{"Username": "你好世界"}) fmt.Println("\n",t2.name(),"\n") t3,_ := template.Parsefiles("test1.HTML") //将一个文件读作模板 t3.Execute(os.Stdout,data) fmt.Println(t3.name(),"\n") //模板名称 t4,_ := template.ParseGlob("test1.HTML") //将一个文件读作模板 t4.Execute(os.Stdout,data) fmt.Println(t4.name())}//注入模板的函数func tihuan(str string) string { return str + "-------" + time.Now().Format("2006-01-02")}
test1.HTML
<!DOCTYPE HTML><HTML><head> <Title>template</Title></head><body>hello {{.Username}}<br></body></HTML>
test2.HTML
<!DOCTYPE HTML><HTML><head> <Title>template</Title></head><body>hello {{.Username}}<br>{{tihuan .Username}}</body></HTML>
模版解析
// 模版解析func (this *YulanController) parseTemplate(tplname string,data interface{}) (string,error) { var HTML string b,err := IoUtil.Readfile(tplname) if err != nil { fmt.Println(tplname,err) return "",err } t := template.New(tplname) template.Must(t.Parse(string(b))) wr := bytes.NewBufferString("") err = t.Execute(wr,data) if err != nil { fmt.Println(err) return "",err } return wr.String(),err}总结
以上是内存溢出为你收集整理的golang html/template全部内容,希望文章能够帮你解决golang html/template所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)