Gin框架学习笔记| 青训营笔记

260 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第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'非常简单,而且性能非常好
  • 使用框架开发,你不仅可以节省大量的时间进行通用打包,还可以为你的团队的编码风格和规范做出贡献