这是我参与「第五届青训营」伴学笔记创作活动的第1天
前言
安装Gin框架
需要go版本在1.6以上
---查看自己go版本
$ go version
---安装Gin框架
$ go get -u github.com/gin-gonic/gin
创建Engine
在gin框架中,Engine被定义为一个结构,这表示gin框架的一个结构定义,包括路由组、中间件、页面渲染接口、包含框架设定等相关内容。
默认的Engine可以在** gin.default **中创建,也可以使用gin.new()来创建。这两种方法是:
engine1 = gin.Default()
engine2 = gin.New()
engine1.Run([主机地址:端口号])
// 例如:
// 不带参数,默认主机地址为localhost,默认端口为8080
engine1.Run()
// 带参数,主机地址为apphost,端口为8090
engine1.Run("apphost:8090")
engine.GET()处理GET请求
engine.GET("/hello", func(context *gin.Context) {
fmt.Println(context.FullPath())
username := context.Query("name")
fmt.Println(username)
context.Writer.Write([]byte("Hello," + username))
})
context.Query(key(string)):读取GET请求附带的参数。参数指定要读取的参数的键值key。
Go语言中net/http设计的最大特点是特别容易构建中间件。gin也提供类似的中间件。需要注意的是,gin中中间件只对已注册的路由函数起作用。
分组路由的情况下,可以通过嵌入中间件来限定中间件的作用范围。大致可分为全局中间件、单路由中间件、分组中间件。
即使是全局中间件,使用前的代码也不会受到影响。handler也可以局部使用。具体请参考api.getuser。
在同时发生的情况下,有时需要限制流量的功能,这时可以导入限制流量的中间件。限制流的方法有两种,具体请自行研究。
导入github.com/didip/tollbooth/limiter包上,上面代码的基础上增加的语句:
//rate-limit 限流中间件
lmt := tollbooth.NewLimiter(1, nil)
lmt.SetMessage("服务繁忙,请稍后再试...")
并修改
v.GET("/index.html", LimitHandler(lmt), handler.IndexHandler)
当F5刷新刷新http://localhost/index.html 页面时,浏览器会显示:服务繁忙,请稍后再试...
限流策略也可以为IP:
tollbooth.LimitByKeys(lmt, []string{"127.0.0.1", "/"})
更多限流策略的配置,可以进一步github.com/didip/tollbooth/limiter 了解。
总结
- Gin是一个封装优雅、API友好、源代码注释清晰、快速灵活、容错方便的golang微框架
- 对于golang来说,web框架比Python、Java等依赖少得多。它自己的'net/http'非常简单,而且性能非常好
- 使用框架开发,你不仅可以节省大量的时间进行通用打包,还可以为你的团队的编码风格和规范做出贡献