实例化echo对象
//实例化echo对象。
e := echo.New()
//定义post请求, url路径为:/user/create, 绑定createUsers控制器函数
user := e.Group("/user")
user.POST("/create", createUser)
//定义get请求,url路径为:/user/get/:id,绑定getUser控制器函数
user.GET("/get", getUser)
//定义put请求,url路径为:/user/put/:id,绑定updateUser控制器函数
user.PUT("/put/:id", updateUser)
//定义delete请求,url路径为:/user/delete/:id,绑定deleteUser控制器函数
user.DELETE("/delete/:id", deleteUser)
定义结构体
// User 结构体定义
type User struct {
Name string `json:"name" form:"name" query:"name"`
Password string `json:"password" form:"password" query:"password"`
}
定义绑定方法
注意,凡是echo路由绑定的方法参数必须包含echo.Context,返回值必须包含error
- Bind
import "fmt"
// bind是获取post请求里body中的参数
func createUser(c echo.Context) (err error) {
user := new(User)
//调用echo.Context的Bind函数将请求参数和User对象进行绑定。
if err = c.Bind(user); err != nil {
return
}
//请求参数绑定成功后 user 对象就保存了请求参数。
//这里直接将请求参数以json格式显示
fmt.Sprintf("name:%v", user.Name)
fmt.Sprintf("password:%v", user.Password)
return c.JSON(http.StatusOK, user)
}
- QueryParam
// QueryParam是获取url:xxxx:xx/get?name=amber
func getUser(c echo.Context) error {
//获取name参数, 通过QueryParam获取的参数值也是String类型。
name := c.QueryParam("name")
password:= c.QueryParam("password")
...
return c.String(http.StatusOK, name)
})
- Param
// Param是获取url:xxxx:xx/delete/xxxxxxxxxxxxxxxxxxx
func deleteUser(c echo.Context) error {
//获取name参数, 通过QueryParam获取的参数值也是String类型。
id := c.Param("id")
...
return c.String(http.StatusOK, id)
})
- Header
// 对于写在header里的参数的获取方式
age := c.Request().Header.Get("age")
设置返回值格式
// json格式,传入的是json的结构体
return c.Json(http.StatusOK, user)
// string格式,传入的是string类型字符串
return c.String(http.StatusOK, id)
获取上传文本文件
// 注册路由
e := echo.New()
e.POST("/upload", uploadFile)
import (
"io"
"os"
"github.com/labstack/echo"
"github.com/labstack/echo/middleware"
)
func uploadFile(c echo.Context) error {
// 通过FormFile获取客户端上传的文件,这里的参数file是在postman里传入的文件名字,可以改
userfile, err := c.FormFile("file")
if err != nil {
return err
}
//打开用户上传的文件
sourcefile, err := userfile.Open()
if err != nil {
return err
}
defer sourcefile.Close()
// 创建目标文件,指定将用户文件保存的位置
// file.Filename 参数创建与用户上传时相同的文件名
dstfile, err := os.Create(userfile.Filename)
if err != nil {
return err
}
defer dstfile.Close()
// 这里将用户上传的文件复制到服务端的目标文件
if _, err = io.Copy(dstfile, sourcefile); err != nil {
return err
}
return c.String(http.StatusOK, userfile.Filename))
}
中间件
e := echo.New()
//Recover中间件,主要用于拦截panic错误并且在控制台打印错误日志,避免echo程序直接崩溃
e.Use(middleware.Recover())
// Logger中间件,每执行http请求时会打印log信息
e.Use(middleware.Logger())