Golang echo默認並不包含關於視圖模版的處理,只是提供了集成第三方模版引擎的接口。可以根據自己的需要選擇任何第三方模版引擎。
提示:開發的是接口服務,不展示html頁面跳過篇。
在echo中使用第三方模版引擎至少需要如下三個步驟:
- 實現echo.Renderer接口
- 注冊模版引擎
- 在控制器中渲染模版並返回html頁面
下面以go自帶的html/template模版引擎為例介紹如何使用模版引擎。
1.實現echo.Renderer接口
echo.Renderer接口定義:
Renderer interface {
//渲染函數定義
//第一參數用於保存渲染模版后的結果
//第二個參數是模版名字
//第三個參數是傳入模版的參數,可以是任意類型
//第四個參數是echo.Context
Render(io.Writer, string, interface{}, Context) error
}
通過實現echo.Renderer接口自定義當調用Render函數的時候使用什么模版引擎來渲染模版。
//自定義的模版引擎struct
type Template struct {
templates *template.Template
}
//實現接口,Render函數
func (t *Template) Render(w io.Writer, name string, data interface{}, c echo.Context) error {
//調用模版引擎渲染模版
return t.templates.ExecuteTemplate(w, name, data)
}
2.注冊模版引擎
接下來,需要向echo實例注冊模版引擎
//初始化echo實例
e := echo.New()
//初始化模版引擎
t := &Template{
//模版引擎支持提前編譯模版, 這里對views目錄下以html結尾的模版文件進行預編譯處理
//預編譯處理的目的是為了優化后期渲染模版文件的速度
templates: template.Must(template.ParseGlob("views/*.html")),
}
//向echo實例注冊模版引擎
e.Renderer = t
//初始化路由和控制器函數
e.GET("/hello", Hello)
3.在控制器中渲染模版並返回html頁面
完成模版引擎設置后,就可以在控制器函數中通過echo.Context對象的Render函數渲染模版並返回html頁面.
函數定義:
Render(code int, name string, data interface{}) error
參數說明:
參數 | 說明 |
---|---|
code | http狀態碼 |
name | 模版文件名 |
data | 模版參數,可以是任意類型數據 |
例子:
模版文件views/hello.html內容
Hello, {{.}}!
渲染模版文件
func Hello(c echo.Context) error {
//渲染hello.html模版文件,模版參數為world
return c.Render(200, "hello.html", "World")
}
渲染結果為:Hello, world!