参考视频学习网站:
【最新Go Web开发教程】基于gin框架和gorm的web开发实战
对应博客:
Go语言标准库之http/template
遇事不决 先写注释
p5代码与笔记:
1.解析模板 返回一个template指针和一个错误类型
tmpl, err := template.ParseFiles("./hello.tmpl")
2.定义结构体时 属性首字母大写 页面可取值 小写的话取不到
map除外 因为它是以键值对的形式
type UserInfo struct {
Name string
Gender string
Age int
}
3. tmpl.Execute(w, "沙河小王子")
利用给定数据渲染模板,并将结果写入w
其中 给定数据可以是其他类型 比如map
4.with的使用
<p>m1</p>
<p>{{ .m1.name }}</p>
<p>{{ .m1.gender }}</p>
<p>{{ .m1.age }}</p>
上面整体等价于:
<p>m1</p>
{{with .m1 }}
<p>{{ .name }}</p>
<p>{{ .gender }}</p>
<p>{{ .age }}</p>
也就是var . = .m1
*/
type UserInfo struct {
Name string
Gender string
Age int
}
func sayHello(w http.ResponseWriter, r *http.Request) {
tmpl, err := template.ParseFiles("./hello.tmpl")
if err != nil {
fmt.Println("create template failed, err:", err)
return
}
//渲染模板
u1 := User {
Name: "夜愿",
Gender: "男",
Age: "24",
}
//键是string类型 值是空接口类型
m1 := map[string]interface{}{
"name": "夜愿",
"gender": "男",
"age": 18,
}
// 字符串类型的切片
hobbyList := []string{
"吃饭",
"睡觉",
"打瞌睡",
}
t.Execute(w, map[string]interface{}{
"u1": u1,
"m1": m1,
"hobby": hobbyList
})
}
func main() {
http.HandleFunc("/", sayHello)
err := http.ListenAndServe(":9090", nil)
if err != nil {
fmt.Println("Http server failed, err:", err)
return
}
}
/*
页面:
<p>ul</p>
<p>Hello {{ .ul.Name }}</p>
<p>Hello {{ .ul.Gender }}</p>
<p>Hello {{ .ul.Age }}</p>
<p>m1</p>
<p>{{ .m1.name }}</p>
<p>{{ .m1.gender }}</p>
<p>{{ .m1.age }}</p>
range遍历hoby 赋给$hobby
{{ range $idx, $hobby := .hobby }}
<p>{{$idx}} - {{$hobby}}</p>
注意 当拿到的是slice时, 第一个值为下标 后面的是值
当拿到的是map时,第一个是key,后面的是value
*/