template包(html/template)实现了数据驱动的语言育模板,用于生成可对抗代码注入的模板安全HTML输出。本包提供了和text/template包相同的渲染接口,无论何时当输出是老男HTML的时候都应使用本包。func New(name string) *Template
创建一个名为name的孩教模板。

Parse方法将字符串text解析为模板。嵌套定义的模板模板会关联到最顶层的t。
Parse可以多次调用,渲染但只有第一次调用可以包含空格、老男注释和模板定义之外的孩教文本。如果后面的语言育调用在解析后仍剩余文本会引发错误、云服务器返回nil且丢弃剩余文本;如果解析得到的模板模板已有相关联的同名模板,会覆盖掉原模板。渲染
func (t *Template) Execute(wr io.Writer,老男 data interface{}) errorExecute方法将解析好的模板应用到data上,并将输出写入wr。孩教如果执行时出现错误,会停止执行,但有可能已经写入wr部分数据。模板可以安全的并发执行。
func ParseFiles(filenames ...string) (*Template, error)ParseFiles函数创建一个模板并解析filenames指定的文件里的模板定义。返回的模板的名字是第一个文件的文件名(不含扩展名),云服务器提供商内容为解析后的第一个文件的内容。至少要提供一个文件。如果发生错误,会停止解析并返回nil。
渲染终端
模板渲染终端
模板替换 {{.字段名}}
package main import ( "fmt" "html/template" "os" ) type Oldboy struct { Name string Slogan string } func main() { // 声明模板内容 const tpl = ` <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <p>Name:{{.Name}}</p> <p>Slogan:{{.Slogan}}</p> </body> </html>` // 创建一个新的模板,并且载入内容 t, err := template.New("oldboy").Parse(tpl) if err != nil { fmt.Println(err) } data := Oldboy{ Name: "oldboy", Slogan: "老男孩IT教育,只培养技术精英。", } err = t.Execute(os.Stdout, data) if err != nil { fmt.Println(err) } }渲染存储文件
模板渲染存储文件
package main import ( "fmt" "html/template" "os" ) type Oldboy struct { Name string Slogan string } // 声明模板内容 const tpl = ` <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <p>Name:{{.Name}}</p> <p>Slogan:{{.Slogan}}</p> </body> </html>` func main() { // 创建一个新的模板,并且载入内容 t, err := template.New("oldboy").Parse(tpl) if err != nil { fmt.Println(err) } data := Oldboy{ Name: "oldboy", Slogan: "老男孩IT教育,只培养技术精英。", } file, err := os.OpenFile("./oldboy.dat", os.O_CREATE|os.O_WRONLY, 0755) if err != nil { fmt.Println("open failed err:", err) return } err = t.Execute(file, data) if err != nil { fmt.Println(err) } }渲染浏览器
目录结构:
oldboy | —— oldboy.go | —— oldboy.htmloldboy.html 代码如下:
<html> <head> <title>oldboy</title> </head> <body> <p>Name:{{.Name}}</p> <p>Slogan:{{.Slogan}}</p> </body> </html>oldboy.go 代码如下:
package main import ( "fmt" "html/template" "net/http" ) type Oldboy struct { Name string Slogan string } func main() { http.HandleFunc("/oldboy", oldboy) err := http.ListenAndServe("0.0.0.0:8888", nil) if err != nil { fmt.Println("http listen failed") } } func oldboy(w http.ResponseWriter, r *http.Request) { t, err := template.ParseFiles("./oldboy.html") if err != nil { fmt.Println("parse file err:", err) return } data := Oldboy{ Name: "oldboy", Slogan: "老男孩IT教育,只培养技术精英。", } t.Execute(w, data) }编译运行,然后在浏览器中输入 :
http://localhost:8888/oldboy
页面显示:
Name:oldboy Slogan:老男孩IT教育,只培养技术精英。form表单提交
package main import ( "io" // "log" "net/http" ) const form = `<html><body><form action="#" method="post" name="bar"> <input type="text" name="in"/> <input type="text" name="in"/> <input type="submit" value="Submit"/> </form></body></html>` func FormServer(w http.ResponseWriter, request *http.Request) { w.Header().Set("Content-Type", "text/html") switch request.Method { case "GET": io.WriteString(w, form) case "POST": request.ParseForm() io.WriteString(w, request.Form["in"][1]) io.WriteString(w, "\n") io.WriteString(w, request.FormValue("in")) } } /* func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) { DefaultServeMux.HandleFunc(pattern, handler) } */ func main() { http.HandleFunc("/test2", FormServer) if err := http.ListenAndServe(":8088", nil); err != nil { } }然后在浏览器中输入 :
http://localhost:8088/test2
页面显示:
两个输入框
第一个输入框输入:123
第二个输入框输入:456
提交表单
页面显示:
456 123
源码下载

相关文章
精彩导读

热门资讯
关注我们
