Go语言模板渲染!老男孩教育
老男孩IT教育
技术博客
2021年2月6日 18:25
template包(html/template)实现了数据驱动的模板,用于生成可对抗代码注入的安全HTML输出。本包提供了和text/template包相同的接口,无论何时当输出是HTML的时候都应使用本包。
template包(html/template)实现了数据驱动的模板,用于生成可对抗代码注入的安全HTML输出。本包提供了和text/template包相同的接口,无论何时当输出是HTML的时候都应使用本包。
func New(name string) *Template
创建一个名为name的模板。
func (t *Template) Parse(src string) (*Template, error)
Parse方法将字符串text解析为模板。嵌套定义的模板会关联到最顶层的t。
Parse可以多次调用,但只有第一次调用可以包含空格、注释和模板定义之外的文本。如果后面的调用在解析后仍剩余文本会引发错误、返回nil且丢弃剩余文本;如果解析得到的模板已有相关联的同名模板,会覆盖掉原模板。
func (t *Template) Execute(wr io.Writer, data interface{}) error
Execute方法将解析好的模板应用到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.html
oldboy.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
老男孩教育在IT培训方面,十分注重理论+实战相结合,全部为名师手把手的带领“课堂即实战式”教学。其中的4项学习思想方针(目标、方法、努力、坚持)和6重教学理念(重目标、重思路、重方法、重实践、重习惯、重总结)已深入广大IT网友及学员的内心,逐步成为互联网IT行业内教育经典。编程思想,历来是老男孩教育的重中之重,学会而且要明白为何要如此操作才能行。
推荐阅读:
