在這一步驟中,完成應用的業務邏輯及數據返回。api
經常使用的http請求方法有下面4種:app
gin框架,url路徑有三種寫法:框架
例子:函數
// 例子1, 靜態Url路徑, 即不帶任何參數的url路徑 /users/center /user/111 /food/12 // 例子2,帶路徑參數的url路徑,url路徑上面帶有參數,參數由冒號(:)跟着一個字符串定義。 // 路徑參數值能夠是數值,也能夠是字符串 //定義參數:id, 能夠匹配/user/1, /user/899 /user/xiaoli 這類Url路徑 /user/:id //定義參數:id, 能夠匹配/food/2, /food/100 /food/apple 這類Url路徑 /food/:id //定義參數:type和:page, 能夠匹配/foods/2/1, /food/100/25 /food/apple/30 這類Url路徑 /foods/:type/:page // 例子3. 帶星號(*)模糊匹配參數的url路徑 // 星號表明匹配任意路徑的意思, 必須在*號後面指定一個參數名,後面能夠經過這個參數獲取*號匹配的內容。 //以/foods/ 開頭的全部路徑都匹配 //匹配:/foods/1, /foods/200, /foods/1/20, /foods/apple/1 /foods/*path //能夠經過path參數獲取*號匹配的內容。
在作api開發的時候,若是要支持多個api版本,咱們能夠經過分組路由來實現api版本處理。post
router := gin.Default() // 建立v1組 v1 := router.Group("/v1") { // 在v1這個分組下,註冊路由 v1.POST("/login", loginEndpoint) v1.POST("/submit", submitEndpoint) v1.POST("/read", readEndpoint) } // 建立v2組 v2 := router.Group("/v2") { // 在v2這個分組下,註冊路由 v2.POST("/login", loginEndpoint) v2.POST("/submit", submitEndpoint) v2.POST("/read", readEndpoint) }
上面的例子將會註冊下面的路由信息:url
路由分組,其實就是設置了同一類路由的url前綴。code
路由須要配合控制器才能完成一次請求,下面咱們來看一下控制器的定義。router
控制器函數定義:對象
func HandlerFunc(c *gin.Context)
控制器函數接受一個上下文參數。
能夠經過上下文參數,獲取http請求參數,響應http請求。生命週期
下面咱們經過一個例子看一下控制器的定義:
//實例化gin實例對象。 r := gin.Default() //定義post請求, url路徑爲:/users, 綁定saveUser控制器函數 r.POST("/users", saveUser) //定義get請求,url路徑爲:/users/:id (:id是參數,例如: /users/10, 會匹配這個url模式),綁定getUser控制器函數 r.GET("/users/:id", getUser) //定義put請求 r.PUT("/users/:id", updateUser) //定義delete請求 r.DELETE("/users/:id", deleteUser) //控制器函數實現 func saveUser(c *gin.Context) { ...忽略實現... } func getUser(c *gin.Context) { ...忽略實現... } func updateUser(c *gin.Context) { ...忽略實現... } func deleteUser(c *gin.Context) { ...忽略實現... }
提示:實際項目開發中不要把路由定義和控制器函數都寫在一個go文件,不方便維護,能夠參考項目結構,規劃本身的業務模塊。
出處 gin從入門到實踐更多精彩文章,請關注個人博客 SOCKSTACK,分享個人工做經驗。