使用過AngularJS應該都會對ng-model的方式印象深刻,類似于Spring的值綁定,使用起來非常的方便。而go的標準庫中也有相關的功能為Web開發提供簡單但卻有非常有用的功能,這就是template。本文將通過兩個簡單的例子來講解一下如何使用go語言中的template。
template
template從初學者最容易理解地角度主要使用來替換,之所以叫做模板是因為其由靜態內容和動態替換內容組成,根據動態內容的變化而最終生成客戶端確認到的不同的內容信息,這就是模板的重要作用,從這個角度來說,設計模式的Template多少也有這么點意思。
如下圖所示,模板的內容為hello {Name},其中不變的為hello,變化的為{Name},通過從結構體中取得其成員變量Name與之進行替換,最終輸出為所需要的信息。
這里寫圖片描述
例子代碼
在這個例子中,我們將會簡單實現上圖所示的簡單功能。
項目 內容
模板內容 Hello, {{.Name}} Welcome to go web programming…
期待輸出 Hello, liumiaocn Welcome to go web programming…
~~~
package main
import "fmt"
import "html/template"
import "os"
func main() {
type person struct {
Id int
Name string
Country string
}
liumiaocn := person{Id: 1001, Name: "liumiaocn", Country: "China"}
fmt.Println("liumiaocn = ", liumiaocn)
tmpl := template.New("tmpl1")
tmpl.Parse("Hello {{.Name}} Welcome to go programming...\n")
tmpl.Execute(os.Stdout, liumiaocn)
}
~~~
和其他語言具有反射機制一樣,需要注意變量的名稱一致。而go語言還需要注意寫法正確({{.}}),開頭字母大寫。
執行結果
~~~
liumiaocn = {1001 liumiaocn China}
Hello liumiaocn Welcome to go programming...
~~~
應用場景
看完這個實例如果有AngularJS或者其他模板開發經驗者可能已經能夠清楚地知道template的應用場景以及為何它是出現在web應用的http包中。沒有這方面基礎的可能只會覺得這僅僅是一個替換而已。
這樣我們再使用一個例子,來實現一個替換,場景為有如下這樣一個html頁面,用來顯示上述結構體person的詳細信息。具體html模板頁面的內容如下
~~~
<html>
<head>
<title>Personal information</title>
</head>
<body style="text-align:center">
<h3>Person general infor</h3>
<hr>
<ul>
<li>Name: {{.Name}}:<p>
<li>Id: {{.Id}} <p>
<li>Country: {{.Country}}
</ul>
<hr>
</body>
</html>
~~~
例子代碼
由靜態不變的內容和動態變化的內容結合起來所形成的模板文件tmpl1.html。在接下來的這個例子中,通過先行讀入template文件tmpl1.html,然后注入數據生成結合了數據的最終結果頁面。
~~~
package main
import "fmt"
import "html/template"
import "os"
func main() {
type person struct {
Id int
Name string
Country string
}
liumiaocn := person{Id: 1001, Name: "liumiaocn", Country: "China"}
fmt.Println("liumiaocn = ", liumiaocn)
tmpl, err := template.ParseFiles("./tmpl1.html")
if err != nil {
fmt.Println("Error happened..")
}
tmpl.Execute(os.Stdout, liumiaocn)
}
~~~
需要注意模板文件的格式錯誤經常會出現運行時的panic,注意檢查。
執行結果
可以看到,模板的內容全部被正確替換。
~~~
liumiaocn = {1001 liumiaocn China}
<html>
<head>
<title>Personal information</title>
</head>
<body style="text-align:center">
<h3>Person general infor</h3>
<hr>
<ul>
<li>Name: liumiaocn:<p>
<li>Id: 1001 <p>
<li>Country: China
</ul>
<hr>
</body>
</html>
~~~
總結
通過html/template包等,go提供了諸如Parse/ParseFiles/Execute等方法可以從字符串或者文件加載模板然后注入數據形成最終要顯示的結果。當然實際的情況會遠不止如此簡單,比如嵌套和多個模板文件如何更好的組合都需要我們進行進一步的探索和學習。

- Go語言基礎篇
- Go語言簡介
- Go語言教程
- Go語言環境安裝
- Go語言結構
- Go語言基礎語法
- Go語言數據類型
- Go語言變量
- Go語言提高篇
- Go語言實現貪吃蛇
- Go 諺語
- 解決連通性問題的四種算法
- golang 幾種字符串的連接方式
- Go JSON 技巧
- Go += 包版本
- Golang 編譯成 DLL 文件
- Go指南:牛頓法開方
- Go語言異步服務器框架原理和實現
- Golang適合高并發場景的原因分析
- 如何設計并實現一個線程安全的 Map ?(上篇)
- go語言執行cmd命令關機、重啟等
- IT雜項
- IT 工程師的自我管理
- IT界不為人知的14個狗血故事
- Go語言版本說明
- Go 1.10中值得關注的幾個變化
- Golang面試題解析
- Golang面試題
- Golang語言web開發
- golang 模板(template)的常用基本語法
- go語言快速入門:template模板
- Go Template學習筆記
- LollipopGo框架
- 框架簡介
- Golang語言版本設計模式
- 設計模式-單例模式
- Golang語言資源下載
- 公眾賬號
- leaf
- 合作講師
- 公開課目錄