最近写golang的时候,有一个实现http server的需求,用golang的框架gin,这里简单总结下使用方法。
01
gin框架介绍
gin框架是利用go开发的一个实现web应用框架,它的开发是基于基础golang工具包net/http的,所以使用起来也比较简单。
对于用户来说,只需要进行3个步骤,就可以实现一个简单的web框架了。分别是引入包、定义http的路由、编写handler函数。
gin框架的下载
github地址:https://github.com/gin-gonic/gin
下载方法:go get -u github.com/gin-gonic/gin
快速上手的案例
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
// 启动gin框架,采用默认配置
router := gin.Default()
// 编写匿名的handler函数
router.GET("/test", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"status": "OK",
"message": "hello,world",
})
})
router.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}
上述代码,采用了默认的gin框架,默认端口是8080,生成了简单的路由/test , 并实现了匿名的handler函数,返回一个json结果。
运行代码,此时我们访问本机的8080端口,就能得到如下输出:
这其实就是http server的一个最简单的形态。
02
自定义需求
在实际的应用程序中,端口往往不能采用默认,而且需要配置多个router来响应不同类型的请求,我们可以将代码改写为下面这样:
package main
import (
"github.com/gin-gonic/gin"
)
// 生成4个空的handler函数
func getting(c *gin.Context) {}
func posting(c *gin.Context) {}
func putting(c *gin.Context) {}
func deleting(c *gin.Context) {}
func main() {
// 启动gin框架,采用默认配置
router := gin.Default()
// 不同的url
router.GET("/someGet", getting)
router.POST("/somePost", posting)
router.PUT("/somePut", putting)
router.DELETE("/someDelete", deleting)
// 修改端口号为8888
router.Run(":8888") // listen and serve on 0.0.0.0:8888 (for windows "localhost:8888")
}
上述代码中,router实现了4个路由get、post、put、delete,每个路由有单独的方法,这些方法可以根据实际的应用逻辑进行实现。例子中,还将运行端口改为8888,避免使用默认端口。
除此之外,还可以对我们的http的url进行分组管理,代码如下:
func main() {
router := gin.Default()
// Simple group: v1
v1 := router.Group("/v1")
{
v1.POST("/login", loginEndpoint)
v1.POST("/submit", submitEndpoint)
v1.POST("/read", readEndpoint)
}
// Simple group: v2
v2 := router.Group("/v2")
{
v2.POST("/login", loginEndpoint)
v2.POST("/submit", submitEndpoint)
v2.POST("/read", readEndpoint)
}
router.Run(":8080")
}
不难看出来,上述代码对http的路径进行了分组,根据不同的组进行请求路由。
在gin的框架的说明文档中,还有很多很好的功能,例如:
如何在url中实现变量?
如何让url中支持查询?
如何用url读取文件内容?
如何在url中写入访问日志。
本篇文章作为抛砖引玉,更详细的框架使用,请大家移步github。
https://github.com/gin-gonic/gin