1. 程式人生 > 其它 >Go模板自定義函式

Go模板自定義函式

技術標籤:Go

main.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) {
	// 定義函式
	k := func (name string) (string, error) {
		return name + "is goods", nil
	}
	// 模板中註冊函式
	t := template.New("hello.tmpl")
	t.Funcs(template.FuncMap{
		"kua": k,
	})
	// 解析模板
	t, err := template.ParseFiles("./hello.tmpl")
	if err != nil {
		fmt.Println("Parse template failured, error: %v", err)
		return
	}
	// 渲染模板
	u1 := User {
		Name: "Go",
		Age: 10,
	}
	m1 := map[string]interface{}{
		"name":"rocky",
		"age": 30,
	}
	// err = t.Execute(w, u1)
	err = t.Execute(w, map[string]interface{}{
		"u1": u1,
		"m1": m1,
	})
	if err != nil {
		fmt.Println("Render template failured, error: %v", err)
		return
	}
}
func main() {
	http.HandleFunc("/hello", sayHello)
	err := http.ListenAndServe(":9000", nil)
	if err != nil {
		fmt.Println("Server start falired, error:%v", err)
		return
	}
}

hello.tmpl

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Go Template</title>
</head>
<body>
<p><h1>{{ kua . }}</h1></p>
</body>
</html>