上课笔记
<html>
部分
<hr>
: 空行
<title> ... </title>
: 标签页的标题
{{/* ... */}}
: HTML中的注释
{{ $v := 100 }}
: 初始化一个变量v并赋值为100
{{if expr}} expr1 {{else}} expr2 {{end}}
expr
: 判断语句 ; expr1
:满足if的语句 ;expr2
:不满足if的语句
{{range $idx,$hobby := .hobbies}}
:循环遍历hobbies
数组
{{index .hobbies 1 }}
:获取hobbies
数组中索引为1
的值
{{ with .m1 }} .name {{end}}
:定义其参数中m1的作用域
Golang
部分
err = t.Execute( w , map[string]interface{}{
"u1" : u1 ,
"m1" : m1 ,
"hobbies" : hobbies,
} )
- 上述代码能说明能传入多个参数,但是其参数的定义
map[string]interface{}
类型传入
演示样例
hello.tmpl程序
<!DOCTYPE html>
<html lang = "zh-CN">
<head>
<title>
Hello
</title>
</head>
<body>
{{/* 利用 user结构体传参获取字段*/}}
<p>u1 User struct </p>
<p>姓名:{{.u1.Name}}</p>
<p>性别:{{.u1.Gender}}</p>
<p>年龄:{{.u1.Age}}</p>
<hr>
{{/* 利用 map映射kv来获取字段 */}}
<p>m1 Map</p>
<p>姓名:{{.m1.name}}</p>
<p>性别:{{.m1.gender}}</p>
<p>年龄:{{.m1.age}}</p>
<hr>
{{/* 定义变量*/}}
{{ $age := 22 }}
<hr>
{{/* if else end 语句*/}}
{{if lt .m1.age $age }}
<h1>小于22岁,好好上学</h1>
{{else}}
<h1>大于22岁,好好上班</h1>
{{end}}
<hr>
{{/* range 的使用*/}}
<p>range's usage</p>
{{ range $idx , $hobby := .hobbies }}
<p>{{$idx}} - {{$hobby}}</p>
{{ end }}
<hr>
{{/* with的使用 */}}
<p>with's usage</p>
{{ with .m1 }}
<p>name : {{.name}}</p>
<p>gender : {{.gender}}</p>
<p>age : {{.age}}</p>
{{ end }}
<hr>
<p>index's usage</p>
<p> {{index .hobbies 1 }}</p>
</body>
</html>
golang程序
package main
import (
"fmt"
"html/template"
"net/http"
)
type user struct {
Name string
Gender string
Age int
}
// 遇事不决 , 注释先行
func sayHello(w http.ResponseWriter , r *http.Request){
// 定义模板 .tmpl
// 2.解析模板
// 请勿刻舟求剑
t , err := template.ParseFiles("./hello.tmpl")
if err != nil{
fmt.Println("template Parse failed , err : %v\n",err)
return
}
// 3.渲染模板
// 定义 结构体 user , 字段必须大写
var u1 = user{
Name : "青见",
Gender : "男",
Age : 19 ,
}
var m1 = map[string]interface{}{
"name" : "青见",
"gender" : "男",
"age" : 19 ,
}
var hobbies = []string{
"唱","跳","Rap",
}
err = t.Execute( w , map[string]interface{}{
"u1" : u1 ,
"m1" : m1 ,
"hobbies" : hobbies,
} )
if err != nil{
fmt.Printf("template Execute failed , err : %v\n",err)
}
}
func main(){
http.HandleFunc("/hello",sayHello)
err := http.ListenAndServe("127.0.0.1:9000",nil)
if err != nil{
fmt.Printf("HTTP Serve failed , err : %v\n",err)
return
}
}