Echo框架 请求结果
Go Echo框架支持以字符串、json、xml、文件等格式返回请求结果,响应请求。
在 Go Echo框架中,使用 echo.Context 上下文对象来支持多种返回处理结果。
1. 以字符串方式响应请求
函数定义:
String(code int, s string) error
参数说明:
参数 | 说明 |
---|---|
code | http 状态码 |
s | 返回字符串结果 |
范例如下:
func(c echo.Context) error { // http.StatusOK == 200 return c.String(http.StatusOK, "欢迎访问 codebaoku.com!") // 也可以直接设置http状态码 // return c.String(200, "欢迎访问 codebaoku.com!") }
net/http 包定义了多种常用的状态码常量,例如:http.StatusOK == 200, http.StatusMovedPermanently == 301, http.StatusNotFound == 404等,具体可以参考 net/http包。
2. 以 json 格式响应请求
函数定义:
JSON(code int, i interface{}) error
参数说明:
参数 | 说明 |
---|---|
code | http状态码 |
i | 返回结果对象,通常传入struct对象 |
范例如下:
// User 定义 type User struct { Name string `json:"name"` // 通过json标签定义struct字段转换成json字段的名字。 Email string `json:"email"` } // Handler 控制器 func(c echo.Context) error { //初始化user对象 u := &User{ Name: "tizi365", Email: "tizi@tizi365.com", } //返回json数据 //返回结果:{"name":"tizi365", "email":"tizi@tizi365.com"} return c.JSON(200, u) }
3. 以 xml 格式响应请求
函数定义:
XML(code int, i interface{}) error
参数说明:
参数 | 说明 |
---|---|
code | http状态码 |
i | 返回结果对象,通常传入struct对象 |
范例如下:
// User 定义, 默认struct的名字就是xml的根节点名字,这里转换成xml后根节点的名字为User. type User struct { Name string `xml:"name"` // 通过xml标签定义struct字段转换成xml字段的名字。 Email string `xml:"email"` } // Handler 控制器 func(c echo.Context) error { // 初始化user对象 u := &User{ Name: "tizi365", Email: "tizi@tizi365.com", } // 返回json数据 // 返回结果: // <?xml version="1.0" encoding="UTF-8"?> // <User><name>tizi365</name><email>tizi@tizi365.com</email></User> return c.XML(200, u) }
4. 以文件格式响应请求
如果我们需要实现文件下载功能,可以直接返回文件。
echo支持多种方式返回文件:
// 例子1: func(c echo.Context) error { // 通过File函数,直接返回本地文件,参数为本地文件地址。 // 函数说明:c.File("文件路径") return c.File("/var/www/1.jpg") } 例子2: func(c echo.Context) error { // 通过Attachment函数,返回本地文件,类似 File 函数,区别是可以指定下载的文件名。 // 函数说明: c.Attachment("文件路径", "下载的文件名") return c.Attachment("/var/www/1.jpg", "1.jpg") } 例子3: func(c echo.Context) (err error) { data := []byte(`0306703,0035866,NO_ACTION,06/19/2006 0086003,"0005866",UPDATED,06/19/2006`) // 通过Blob函数,以二进制数据格式返回文件 // 函数说明:c.Blob(状态码, "contentType", byte数组) return c.Blob(http.StatusOK, "text/csv", data) } 例子4: func(c echo.Context) error { // 打开文件 f, err := os.Open("/var/www/1.jpg") if err != nil { return err } // 通过Stream函数,以stream流的方式返回文件 // 函数说明: // Stream(code int, contentType string, r io.Reader) error // 参数说明: // code - 状态码 // contentType - html内容类型 // r - 实现io.Reader接口的struct对象都可以直接输出内容 return c.Stream(http.StatusOK, "image/png", f) }
5. 设置 http 响应头(设置 Header)
func(c echo.Context) error { // 设置http响应 header c.Response().Header().Add("site", "codebaoku") return c.String(200, "欢迎访问 codebaoku.com!") }
Go Echo框架默认并不包含关于 HTML 模板的处理,只是提供了集成第三方模版引擎的接口。我们可以根据自己的需要选择任何第三方模版引擎。在 Go Echo框架中使用第三方模版引擎至少需要如下三个步骤:实现echo.Renderer接口、注册模版引擎、在控制器中渲染模版并返回html页面。