在这一步骤中,完成应用的业务逻辑及数据返回。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,分享个人工做经验。