文档
测试

Gin 基础使用--路由篇

POST

说明 / 示例

### 1.初始化golang 项目 ``` cmd 项目名称 go mod init 项目名称 ``` ### 2.安装 gin ``` go get -u github.com/gin-gonic/gin ``` ### 3.main.go 示例代码 ``` package main import ( "net/http" "github.com/gin-gonic/gin" ) func main() { //创建gin 引擎 r := gin.New() //定义首页路由 r.GET("/",func(c *gin.Context){ c.String(http.StatusOK,"我是首頁") }) //启动服务,指定服务地址和端口号 r.Run(":8000") } ``` ### 4. gin 路由使用 #### 4.1 基础路由 在gin中,路由是由路由方法、请求路径和处理函数组成的,其中路由方法有GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS等。使用r.GET()、r.POST()、r.PUT()和r.DELETE()等方法来定义路由。 ``` r.GET("/test_get",func(c *gin.Context){ c.String(http.StatusOk,"我是GET路由") }) ``` #### 4.2 参数路由 使用(:)定义参数路由 ``` r.GET("/test_param/:name",func(c *gin.Context){ name = c.Param("name") c.String(http.StatusOK,"我是参数路由: %s",name) }) ``` #### 4.3 r.Handle() 方法定义多种请求类型 ``` r.Handle("GET","/test_handle",func(c *gin.Context){ c.String(http.StatusOk,"我是GET handle请求路由") }) r.Handle("POST","/test_handle",func(c *gin.Context){ c.String(http.StatusOk,"我是POST handle请求路由") }) ``` #### 4.4 r.group 路由分组 ``` v1 := r.Group("/v1"){ v1.GET("/test_group",func(c *gin.Context){ c.String(http.StatusOK,"我是路由分组") }) } ``` #### 4.5 路由中间件 ``` //定义中间件方法 func Auth() gin.HandlerFunc{ return func(c *gin.Context){ //验证请求头Authorization值 if c.GetHeader("Authorization" != "login") { c.AbortWithStatus(http.StatusUnauthorized) } c.Next() } } //使用中间件 r.GET("/test_middleware",Auth(),func(c *gin.Context){ c.String(http.StatusOK,"我使用了中间件") }) ``` #### 4.6 获取路由参数 ``` //使用c.Query()获取GET路由参数 r.GET("/test_query_get",func(c *gin.Context){ name := c.Query("name") age := c.Query("age") c.String(http.StatusOK,"我是%s,今年%s",name,age) }) //使用c.PostForm获取post路由参数;返回json数据前端接收使用 c.POST("/test_post_form",func(c *gin.Context){ name := c.PostFrom("name") age := c.PostForm("age") c.JSON(http.StatusOK,gin.H{ "name" : name, "age" : age, }) }) ``` #### 4.7 json数据绑定 ``` //定义json结构体 type User struct{ Name string `json:name` Age int `json:age` } r.GET("/test_json",func(c *gin.Context){ var user User //验证请求参数是否跟绑定值一致 if err := c.BindJSON(&user);err == nil{ c.JSON(http.StatusOK,gin.H{ "name" : user.name, "age" : user.age, }) }else{ c.JSON(http.StatusBadRequest,gin.H{ "error":err.Error(), }) } }) ```