go模板语法简记

参考视频学习网站:
【最新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
*/  
发布了100 篇原创文章 · 获赞 15 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_37767455/article/details/104635049