随心的博客

好记性不如个烂笔头,随心记录!

返回顶部

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")
}

路由文章内只能是抛砖引玉,在实际项目中才会更完善

 

完结

 

posted @ 2023-04-09 22:09  yangphp  阅读(236)  评论(0编辑  收藏  举报