gin框架路由router
前言:
gin框架中采用的路由库是基于httprouter做的
正文:
需要安装postman 发送请求
各种请求方法:
GET(string, ...HandlerFunc)
POST(string, ...HandlerFunc)
DELETE(string, ...HandlerFunc)
PATCH(string, ...HandlerFunc)
PUT(string, ...HandlerFunc)
OPTIONS(string, ...HandlerFunc)
HEAD(string, ...HandlerFunc)
// 匹配所有
Any(string, ...HandlerFunc)
//没有匹配上路由
NoRoute(handlers ...HandlerFunc)
路由请求实例1:
输出string类型
c.String(http.StatusOK, "hello index")
import ( "github.com/gin-gonic/gin" "net/http" ) // 实现index方法 func index(c *gin.Context) { //输出string c.String(http.StatusOK, "hello index") } func login(c *gin.Context) { c.String(200, "hello post") } func puts(c *gin.Context) { c.String(200, "hello puts") } func deletes(c *gin.Context) { c.String(200, "hello deletes") } func any(c *gin.Context) { c.String(200, "hello any") } func main() { r := gin.Default() r.GET("index", index) //发送 get请求 r.POST("login", login) //发送 post请求 r.PUT("put", puts) //发送 put请求 r.DELETE("delete", deletes) //发送 delete请求 r.Any("any", any) //可接受任意请求 r.NoRoute(func(c *gin.Context) { //找不到路由进这里 c.String(200, "没找到的路由...") }) r.Run() //端口 默认 8080 }
获取get参数,获取post参数
必选参数
使用 :param 的语法完成必选参数,例如 /user/:ID,即可匹配 /user/60 这个 URI,但不能匹配 /user
可选参数
使用 *param 的语法完成可选参数的定义,例如 /user/*ID 可以匹配 /user/60 和 /user
获取参数:
使用 gin.Context 对象的 c.Param("param") 来获取参数值
输出字符串
c.String(200, "id的值为:"+c.Query("id"))
GET请求获取参数
c.Query("id")
GET获取参数并设置默认值
c.DefaultQuery("age", "66")
获取所有GET参数
c.Request.URL.Query()
获取get参数实例:
请求地址:http://localhost:8080/shop?id=1234&name=lampol&age=32 router.GET("shop", func(c *gin.Context) { c.String(200, "id的值为:"+c.Query("id")) //输出参数 c.String(200, "\n") c.String(200, "name的值为:"+c.Query("name")) //输出参数 c.String(200, "\n") c.String(200, "age的值为:"+c.DefaultQuery("age", "66")) //输出默认参数 c.String(200, "\n") //获取所有参数 fmt.Println(c.Request.URL.Query()) data := c.Request.URL.Query() c.String(200, data["id"][0]+"\n") c.String(200, data["name"][0]+"\n") c.String(200, data["age"][0]+"\n") c.JSON(200, data) //输出json格式 })
获取Post参数实例
获取post的参数
c.PostForm("name")
获取post的参数,并设置默认值
c.DefaultPostForm("age", "46")
router.POST("login", func(c *gin.Context) { c.String(200, c.PostForm("name")+"\n") //获取name的值 c.String(200, c.PostForm("passwd")+"\n") //获取passwd的值 c.String(200, c.DefaultPostForm("age", "46")+"\n") //获取默认值 //获取所有的值 data := c.Request.PostForm c.JSON(200, data) })
路由分组:
分组可以根据模块分组 user goods order ..
也可以根据版本分组 v1 v2 ...
分组语法:
router.Group("user")
路由分组实例1:
router := gin.Default() //路由分组 user := router.Group("user") { //大括号要放到下面来,不然会报错 user.GET("login", login) user.GET("loginout", loginout) } goods := router.Group("goods") { goods.GET("list", goodsList) goods.GET("add", goodsAdd) } router.Run()
路由分组实现MVC架构:
创建目录 controller
创建目录 router
创建router/router.go 管理所有路由
创建 router/userRouter.go 管理 user模块下的路由
创建 controller/user.go 管理路由对应的控制
代码如下:
main.go: func main() { router := router.InitRouter() router.Run() } router/router.go func InitRouter() *gin.Engine { //路由文件 router := gin.Default() //用户模块路由 userRouter(router) //商品模块路由 goodsRouter(router) return router } router/userRouter.go func userRouter(r *gin.Engine) { r.GET("login", controller.Login) } controller/user.go func Login(c *gin.Context) { c.String(200, "hello controller login") }
路由文章内只能是抛砖引玉,在实际项目中才会更完善
完结
但行好事,莫问前程!
本文来自博客园,作者:yangphp,转载请注明原文链接:https://www.cnblogs.com/ypeih/p/17301243.html