Golang Web 框架之Echo

537 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第10天,点击查看活动详情

Echo项目于15年正式开源,时至今日已更新到4.x的版本,Echo在推崇极简主义的同时,还具有完善的Web功能、清晰的文档结构。

官方文档:echo.labstack.com/guide/#inst…

Echo 安装

使用go init my-app初始化项目后,使用以下命令安装echo

go get github.com/labstack/echo/v4

快速上手

Echo 项目的启动也比较简单,核心步骤主要分为三个步骤:获取Echo结构体-->注册路由-->指定项目端口,按以下代码运行后,访问地址 http://127.0.0.1:1323 可得到返回的JSON数据

// 获取Echo对象
e := echo.New()
// 将路由地址与处理函数进行绑定
e.GET("/", func(c echo.Context) error {
   return c.JSON(http.StatusOK, echo.Map{
      "code": 200,
      "msg":  "Success",
   })
})
// 启动服务并监听1323端口
e.Logger.Fatal(e.Start(":1323"))

获取前端传递的参数

前端传递参数的方式主要分为以下四种:1.在路由中约定不同URI代表不同的值;2.在请求地址中设置参数;3.使用FORM表单传值;4.传递JSON格式的数据

获取URI中的参数

通过Param方法获取在路由中携带过来的值

// curl 127.0.0.1:1323/user/123
e.GET("/user/:id", func(c echo.Context) error {
   return c.String(http.StatusOK, "ID ==> " + c.Param("id")) // ID ==> 123
})

获取请求地址中设置的参数

使用QueryParam获取地址中传递过来的参数

// curl 127.0.0.1:1323/user?id=123
e.GET("/user", func(c echo.Context) error {
   return c.String(http.StatusOK, "ID ==> " + c.QueryParam("id")) // ID ==> 123
})

获取FORM表单传递的值

使用FormValue获取表单传递过来的参数

// curl -X POST -d 'id=123' 127.0.0.1:1323/user
e.POST("/user", func(c echo.Context) error {
   return c.String(http.StatusOK, "ID ==> " + c.FormValue("id"))
})

解析传递的JSON数据

对于JSON数据需要先定义一个接受数据的结构体,然后使用Bind方法将前端传递过来的数据进行映射

// curl -X POST -H 'Content-Type: application/json' -d '{"id":"123"}' 127.0.0.1:1323/user
// 定义数据映射结构体
type Data struct {
   Id string
}
// 处理请求
e.POST("/user", func(c echo.Context) error {
   d := new(Data)
   err := c.Bind(d)
   if err != nil {
      log.Fatalln(err)
   }
   return c.String(http.StatusOK, "ID ==> " + d.Id)
})

参数返回

Echo支持多种类型的返回参数,例如:JSON、XML、STRING、HTML、FILE、STREAM等,这里主要分析前三种返回参数的使用

返回JSON

使用JSON方法返回JSON格式的数据,其中传递的参数支持结构体、Map

  • 使用结构体返回数据
// curl 127.0.0.1:1323/user
e.GET("/user", func(c echo.Context) error {
   d := &Data{Id: "123"}
   return c.JSON(http.StatusOK, d)
})
  • 使用Map返回数据
// curl 127.0.0.1:1323/user
e.GET("/user", func(c echo.Context) error {
   return c.JSON(http.StatusOK, echo.Map{
      "id": "123",
   })
})

返回XML

使用XML方法将结构体数据处理为XML格式再返回

// curl 127.0.0.1:1323/user
e.GET("/user", func(c echo.Context) error {
   d := &Data{Id: "123"}
   return c.XML(http.StatusOK, d)
})

返回STRING

使用String方法直接返回字符串,可参考上述案例,这里就不再赘述

静态站点部署

使用Static方法可以配置静态资源文件的访问,配置完成后使用地址127.0.0.1:1323/static/xxx.png,可以获取静态文件夹中的xxx.png这个图片

// /static 访问地址
// D:\myself\static 静态文件夹地址
e.Static("/static", "D:\myself\static")