template初识
大佬博客:https://www.liwenzhou.com/posts/Go/template/
第一个坑:
HTTP server start failed , err : listen tcp: address 9090: missing port in address
解决:
吾甚是愚蠢,抄都抄错了,写端口的时候
Go
":9000" 写成了 "9000",忘记加冒号了
代码1
Go
package main
import (
"fmt"
"html/template"
"net/http"
)
func sayHello(w http.ResponseWriter, r *http.Request) {
//解析模板
t, err := template.ParseFiles("./hello.tmpl")
if err != nil {
fmt.Printf("Parse template failed,err : %v\n", err)
return
}
//渲染模板
err = t.Execute(w, "jzy")
if err != nil {
fmt.Printf("render template failed,err : %v\n", err)
return
}
}
func main() {
http.HandleFunc("/", sayHello)
err := http.ListenAndServe(":9000", nil)
if err != nil {
fmt.Printf("HTTP server start failed , err : %v\n", err)
return
}
}
代码2:
Go
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) {
//定义模板
//解析模板
t, err := template.ParseFiles("./hello.tmpl")
if err != nil {
fmt.Printf("parse template failed , err : %v\n", err)
return
}
//渲染模板
//结构体 内容首字母大写
u1 := User{
Name: "蒋志宇",
Gender: "男",
Age: 18,
}
//map首字母不用大写
m1 := map[string]interface{}{
"Name": "老马",
"Gender": "男",
"Age": 18,
"td": "一开枪就马",
}
t.Execute(w, map[string]interface{}{
"u1": u1,
"m1": m1,
})
}
func main() {
http.HandleFunc("/", sayHello)
err := http.ListenAndServe(":9000", nil)
if err != nil {
fmt.Printf("HTTP server start failed , err : %v\n", err)
return
}
}
今天主要是学了学这个template模板库
Go语言标准库之http/template | 李文周的博客 (liwenzhou.com)
代码2:
Go
package main
import (
"fmt"
"html/template"
"net/http"
)
func f1(w http.ResponseWriter, r *http.Request) {
//定义一个函数
//要么只有一个返回值,要么第二个返回值必须是err类型
kua := func(arg string) (string, error) {
return arg + "真帅", nil
}
//自定义的函数要想使用,就要告诉我们的模板现在多了一个函数,要在解析模板之前
//定义模板
t := template.New("hello.tmpl")
//告诉模板引擎,现在多了一个函数kua
t.Funcs(template.FuncMap{
"kua": kua,
})
//如果要用NEW,模板名称一定要一样才行
//解析模板
_, err := t.ParseFiles("./hello.tmpl")
if err != nil {
fmt.Printf("parse template failed , err : %v\n", err)
return
}
name := "jzy"
t.Execute(w, name)
//渲染模板
}
func demo1(w http.ResponseWriter, r *http.Request) {
//定义模板
//解析模板,解析多个时,把被包含的写到后面
t, err := template.ParseFiles("./t.tmpl", "./ul.tmpl")
if err != nil {
fmt.Printf("parse template failed , err : %v\n", err)
return
}
name := "jzy大帅哥"
//渲染模板
t.Execute(w, name)
}
func main() {
http.HandleFunc("/", f1)
http.HandleFunc("/tmpldemo", demo1)
err := http.ListenAndServe(":9000", nil)
if err != nil {
fmt.Printf("HTTP server start failed , err : %v\n", err)
return
}
}