實例化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())