说明 / 示例
### 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(),
})
}
})
```