Gin是什么
Gin 是一个用 Go 编写的 HTTP web 框架。它就像java中的springMVC框架,由于使用了go语言内置的httprouter,速度比另一款goWeb框架martini提高了近 40 倍。
Gin快速入门
1.使用命令快速安装
go get -u github.com/gin-gonic/gin
2.引入gin包到你的代码中
import "github.com/gin-gonic/gin"
Gin基本使用
1.基础使用
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"msg": "ok",
})
})
r.Run(":8090") // 修改端口号, 默认8080
}
访问127.0.0.1:8090/ping路径就可以得到响应 可以通过r.GET r.POST r.DELETE r.PUT等方法来控制请求方法
2.请求参数的获取
1.获取URL中的参数Params
// 此规则能够匹配 /user/hello这种格式,但不能匹配 /user/ 或 /user 这种格式
router.GET("/user/:name", func(c *gin.Context) {
name := c.Param("name")
c.String(http.StatusOK, "Hello %s", name)
})
访问127.0.0.1:8080/user/hello路径就可以得到响应Hello hello
2.获取URL中的Query参数
// 匹配的url格式: /hello?name=mike&lastname=Davie
router.GET("/hello", func(c *gin.Context) {
firstname := c.DefaultQuery("name", "Guest") // 此方法可以设置默认值
lastname := c.Query("lastname")
c.String(http.StatusOK, "Hello %s %s", name, lastname)
})
访问127.0.0.1:8080/hello/name=mike&lastname=Davie路径就可以得到响应Hello mike Davie
3.获取POST参数
router.POST("/hellot", func(c *gin.Context) {
message := c.PostForm("message")
name := c.DefaultPostForm("name", "mike") // 此方法可以设置默认值
c.JSON(200, gin.H{
"code": "200",
"message": message,
"name": nick,
})
})
PostForm方法可以获取到body中的参数,c.JSON方法可以将要返回的数据转为json格式并返回,项目中也用的比较多
4.参数绑定
type Student struct {
Name string `binding:"required"` //注意此处添加了binding注解,便于测试
}
func main() {
r := gin.Default()
//使用ShouldBindQuery
r.GET("/student1", func(c *gin.Context) {
var student Student
if err := c.ShouldBindQuery(&student); err != nil {
c.JSON(http.StatusOK, gin.H{"msg": "fail"})
} else {
fmt.Println(student)
c.JSON(http.StatusOK, gin.H{"msg": "success"})
}
})
//使用BindQuery
r.GET("/student2", func(c *gin.Context) {
var student Student
if err := c.BindQuery(&student); err != nil {
c.JSON(http.StatusOK, gin.H{"msg": "success"})
} else {
c.JSON(http.StatusOK, gin.H{"msg": "fail"})
}
})
r.Run(":8080")
}
经过测试
使用使用BindQuery绑定模型时,如果发生绑定错误,则会自动返回400响应状态码,并且Content-Type 被设置为 text/plain; charset=utf-8
所以一般实际项目中使用的是ShouldBindQuery,出现错误时方便自己手动管理。