gin+gorm

GIN

1.gin 的接口设置:

1.指定用户使用GET请求访问/hello

1
2
3
4
5
6
7
8
9
10
11

指定用户使用GET请求访问/hello
r.GET("/json", func(c *gin.Context) {
data := gin.H{"name": "小王子",
"message": "hello world!",
"age":"18",
}

c.JSON(http.StatusOK,data)

})

2.结构体

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
方法二 结构体  如果需要长期的返回json 事先准备好结构体类型来返回数据
type msg struct{
Name string
Age int
Message string
} 通过结构体 来实现返回json
在golang中 小写不可导出 只能在内部使用 所以必须首字母大写 或者使用tag `json:name`
r.GET("/another_json", func(c *gin.Context) {
data := msg{
"小王子",
18,
"hello,golang",
}
c.JSON(http.StatusOK,data)
})

3.来获取querystring参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
r.GET("/web", func(c *gin.Context) {
获取浏览器发起请求携带的query string参数
获取参数: name := c.Query("query")

c.Default("query")
name := c.DefaultQuery("query","somebody")//取不到就用后面的默认值
name, ok := c.GetQuery("query")
if !ok{
// 取不到
name = "somebody"
}
c.JSON(http.StatusOK,gin.H{
"name":name,
})
})

4.获取form表单提交的参数

1
2
3
4
5
6
7
8
9
10
11
12
r.GET("/login", func(x *gin.Context) {
username := x.PostForm("username")
password := x.PostForm("password")
username := x.DefaultPostForm("username","other name") default+xxx 当参数不正确或者未输入时会会使用默认值
})


通过path(URI)传递参数
r.GET("/:login/", func(c *gin.Context) {

})

5.参数绑定

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
	r.GET("/getuser", func(c *gin.Context) {
user:=&UserInfo{} //实例化结构体
err:= c.ShouldBind(&user)
if err==nil{
c.JSON(http.StatusOK,user)
}else{
c.JSON(http.StatusOK,gin.H{
"err":err.Error()})
}
})

type UserInfo struct {
Username string `json:"username" form:"username"`
Password string `json:"password" form:"password"`
}

6.中间件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
      func InitMiddleware(c *gin.Context){
fmt.Println("aaa")
}//设置了一个回调函数在外部定义

r.GET("/",InitMiddleware, func(c *gin.Context) {
c.String(http.StatusOK,"网站首页")
})//在调用url时 先执行中间件的回调函数


//Next()方法 使用next方法时先调用next上方的函数后 直接调用url中的回调函数 最后调用next下面的方法
func InitMiddleware(c *gin.Context){
fmt.Println("我是一个中间件1")
c.Next()
fmt.Println("我是一个中间件2")
}
r.GET("/",InitMiddleware, func(c *gin.Context) {
fmt.Println("我是网站首页")
c.String(http.StatusOK,"网站首页")
})
我是一个中间件1
我是网站首页
我是一个中间件2

//中间件就是在匹配路由之前和匹配路由之后完成的一些操作 中间件可以配置多个 执行程序按照前后位置继续执行

//配置多个中间件 通过ues()全局配置多个中间件 路由分组中配置中间件
// 在中间件设置数据

GORM