Golang echo默认并不包含关于视图模版的处理,只是提供了集成第三方模版引擎的接口。我们可以根据自己的需要选择任何第三方模版引擎。
提示:如果你开发的是接口服务,不提供html页面可以跳过本章内容。
前置技术知识点:
- 模板引擎 - 点击Go模板引擎教程,学习完整的模板引擎语法。
在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!