框架是敏捷开发中的利器,更像是一些常用函数或者工具的集合。借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范。
框架能让开发者快速上手。Golang提供的net/http库对于http协议的实现非常好,基于此的Gin框架是一个封装优雅,API友好的web微框架。
0 Hello World
如下代码所示,简单的几行代码就能实现一个web服务。使用gin的Default方法创建一个路由handler。然后通过HTTP方法绑定路由规则和路由函数。不同于net/http库的路由函数,gin进行了封装,把request和response都封装到gin.Context的上下文环境。最后是启动路由的Run方法监听端口。麻雀虽小,五脏俱全。当然,除了GET方法,gin也支持POST,PUT,DELETE,OPTION等常用的restful方法。
1 | package main |
我们在主机上运行代码并访问http://localhost:8000,即可访问看到Hello World
字样。
查看gin.Default()
源代码,如下:
1 | // Default returns an Engine instance with the Logger and Recovery middleware already attached. |
可以发现,gin.Default()
函数内部调用New()函数来初始化一个gin实例,同时使用注册了Logger
和Recovery
两个中间件,所以我们也可以使用gin.New()
函数来初始化一个无中间件启动的gin实例。
1 Gin框架的几个核心结构
开发一个HTTP服务,首先需要启动一个TCP监听,然后需要一系列的handler来处理具体的业务逻辑,最后在再将具体的业务逻辑通过HTTP协议约定和相关的Method和URL进行绑定,以此来对外提供具体功能的HTTP服务。Gin中通过以下几个重要的模型来实现以上功能。
1.1 Engine
用来初始化一个gin对象实例,在该对象实例中包含了一些框架的基础功能。如前代码所示,首先我们使用gin.Default()
或者gin.New()
初始化一个实例。
1 | type Engine struct { |
如上,New()
和Default()
函数用于初始化*Engine
实例。