在Go语言中web项目标准结构如下
--项目名 --src --static --css --images --js --view //这里放模板 --login --login.html --index.html --main.go
模板使用
package main
import (
"html/template"
"net/http"
)
func login(w http.ResponseWriter, r *http.Request) {
t, _ := template.ParseFiles("view/login/login.html")//找模板
t.Execute(w, nil)//执行模板
}
func main() {
server := http.Server{Addr: "localhost:8080"}
http.HandleFunc("/login", login)
server.ListenAndServe()
}
这样写的话静态文件都比如css,js或者图片都找不到,要加这样一段代码
package main
import (
"html/template"
"net/http"
)
func login(w http.ResponseWriter, r *http.Request) {
t, _ := template.ParseFiles("view/login/login.html")
t.Execute(w, nil)
}
func main() {
server := http.Server{Addr: "localhost:8080"}
/*
访问url以/static/开头,就会把访问信息映射到指定的目录中
*/
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
http.HandleFunc("/login", login)
server.ListenAndServe()
}
这样就可以解析static里面的静态文件了
模板传参
#index.html
<!DOCTYPE html>
<html>
<head>
<title>index</title>
</head>
<body>
<pre>
当前用户信息:<br/>
姓名:{{.}}<br/>
</pre>
</body>
</html>
template.Execute()第二个参数传递的值
最常用的{{.}}
中的”.”是指针,指向当前变量,称为”dot”
package main
import (
"html/template"
"net/http"
)
func index(w http.ResponseWriter, r *http.Request) {
t, _ := template.ParseFiles("view/index.html")
t.Execute(w, "李四")//
}
func main() {
server := http.Server{Addr: "localhost:8080"}
http.HandleFunc("/", index)
server.ListenAndServe()
}
传递结构体类型数据
<!DOCTYPE html>
<html>
<head>
<title>index</title>
</head>
<body>
<pre>
当前用户信息:<br/>
姓名:{{.Name}}<br/>
年龄:{{.Age}}<br/>
</pre>
</body>
</html>
package main
import (
"html/template"
"net/http"
)
//注意:只有首字母大写的属性才能在模版中访问到
type User struct {
Name string
Age int
}
func index(w http.ResponseWriter, r *http.Request) {
t, _ := template.ParseFiles("view/index.html")
t.Execute(w, User{"李四", 31})//此处传递结构体数据
}
func main() {
server := http.Server{Addr: "localhost:8080"}
http.HandleFunc("/", index)
server.ListenAndServe()
}
向模版传递map类型数据
HTML代码如下,里面使用了连缀写法
<!DOCTYPE html>
<html>
<head>
<title>index</title>
</head>
<body>
<pre>
当前用户信息:<br/>
姓名:{{.user.Name}}<br/>
年龄:{{.user.Age}}<br/>
购物金额:{{.money}}
</pre>
</body>
</html>
package main
import (
"html/template"
"net/http"
)
type User struct {
Name string
Age int
}
func index(w http.ResponseWriter, r *http.Request) {
t, _ := template.ParseFiles("view/index.html")
m := make(map[string]interface{})
m["user"] = User{"李四", 31}
m["money"] = 1000
t.Execute(w, m)//此处传递map数据
}
func main() {
server := http.Server{Addr: "localhost:8080"}
http.HandleFunc("/", index)
server.ListenAndServe()
}
模板调用函数
package main
import (
"html/template"
"net/http"
"time"
)
type User struct {
Name string
Age int
}
func MyFormat(s string) string {
t, _ := time.Parse("2006-01-02 15:04:05", s)
t = t.Add(60e9) //在时间上添加1分钟
return t.Format("2006-01-02 15:04:05")
}
func index(w http.ResponseWriter, r *http.Request) {
//把自定义函数绑定到FuncMap上
funcMap := template.FuncMap{"mf": MyFormat}
//此处注意,一定要先绑定函数
t := template.New("index.html").Funcs(funcMap)
//绑定函数后在解析模版
t, _ = t.ParseFiles("view/index.html")
s := "2009-08-07 01:02:03"
t.Execute(w, s)
}
func main() {
server := http.Server{Addr: "localhost:8080"}
http.HandleFunc("/", index)
server.ListenAndServe()
}