模板引擎
Go 為我們提供了 text/template 庫和 html/template 庫這兩個模板引擎,模板引
擎通過將資料和模板組合在一起生成最終的 HTML,而處理器負責呼叫模板引擎并將引
擎生成的 HTMl 回傳給客戶端,
Go 的模板都是文本檔案(其中 Web 應用的模板通常都是 HTML),它們都嵌入了
一些稱為動作的指令,從模板引擎的角度來說,模板就是嵌入了動作的文本(這些文本
通常包含在模板檔案里面),而模板引擎則通過分析并執行這些文本來生成出另外一些
文本,
HelloWorld
使用 Go 的 Web 模板引擎需要以下兩個步驟:
(1) 對文本格式的模板源進行語法分析,創建一個經過語法分析的模板結構,其中
模板源既可以是一個字串,也可以是模板檔案中包含的內容,
(2 )執行經過語法分析的模板,將 ResponseWriter 和模板所需的動態資料傳遞給模
板引擎,被呼叫的模板引擎會把經過語法分析的模板和傳入的資料結合起來,生成出最
終的 HTML,并將這些 HTML 傳遞給 ResponseWriter,
下面就讓我們寫一個簡單的 HelloWorld
- 創建模板檔案 hello.html
<html>
<head>
<title>模板檔案</title>
<meta charset="utf-8" />
</head>
<body>
//嵌入動作 {{.}}
</body>
</html>
- 在處理器中觸發模板引擎
func handler(w http.ResponseWriter, r *http.Request) {
//決議模板檔案
t, _ := template.ParseFiles("hello.html")
//執行模板
t.Execute(w, "Hello World!")
}
- 瀏覽器中的結果
Hello World!
決議模板
- ParseFiles 函式
當我們呼叫 ParseFiles 函式決議模板檔案時,Go 會創建一個新的模板,
并將給定的模板檔案的名字作為新模板的名字,如果該函式中傳入了多個
檔案名,那么也只會回傳一個模板,而且以第一個檔案的檔案名作為模板
的名字,至于其他檔案對應的模板則會被放到一個 map 中,讓我們再來
看一下 HelloWorld 中的代碼:
t, _ := template.ParseFiles("hello.html")
以上代碼相當于呼叫 New 函式創建一個新模板,然后再呼叫 template 的
ParseFiles 方法:
t := template.New("hello.html")
t, _ = t.ParseFiles("hello.html")
我們在決議模板時都沒有對錯誤進行處理,Go 提供了一個 Must 函式專
門用來處理這個錯誤,Must 函式可以包裹起一個函式,被包裹的函式會
回傳一個指向模板的指標和一個錯誤,如果錯誤不是 nil,那么 Must 函式
將產生一個 panic,
實驗 Must 函式之后的代碼
t := template.Must(template.ParseFiles("hello.html"))
- ParseGlob 函式
通過該函式可以通過指定一個規則一次性傳入多個模板檔案,如:
t, _ := template.ParseGlob("*.html")
執行模板
- 通過 Execute 方法
如果只有一個模板檔案,呼叫這個方法總是可行的;但是如果有多個模板
檔案,呼叫這個方法只能得到第一個模板
- 通過 ExecuteTemplate 方法
例如:
t, _ := template.ParseFiles("hello.html", "hello2.html")
變數 t 就是一個包含了兩個模板的模板集合,第一個模板的名字是
hello.html,第二個模板的名字是 hello2.html,如果直接呼叫 Execute 方法,
則只有模板 hello.html 會被執行,如何想要執行模板 hello2.html,則需要
呼叫 ExecuteTemplate 方法
t.ExecuteTemplate(w, "hello2.html", "我要在 hello2.html 中顯示")
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/49388.html
標籤:Go
上一篇:送別2019,期待2020!
下一篇:goweb-動作
