Golang 应用框架
web 框架
gin
Gin 是轻量级的 Web 框架,用于快速搭建 RESTful 风格的 Web 服务。
有以下特点:
- 路由,既简单又丰富的路由解析功能。
- 速度,业界测试 Gin 路由的性能极好。
- 中间件,实现请求或响应拦截器。
- 内置渲染,支持JSON/XML/HTML等格式进行响应渲染。
原理: - 路由的解析采用基数树(压缩字典树)数据结构。
func MyMiddleware1() gin.HandlerFunc { //中间件 1
return func(context *gin.Context) {
fmt.Println("MyMiddleware1 begin")
context.Next() //执行下一个中间件后再继续
fmt.Println("MyMiddleware1 end")
}
}
func MyMiddleware2() gin.HandlerFunc { //中间件 2
return func(context *gin.Context) {
fmt.Println("MyMiddleware2")
}
}
func main() {
r := gin.Default() //默认引擎注册了日志中间件和panic处理中间件
r.Use(MyMiddleware1(), MyMiddleware2()) //注册两个自定义中间件
r.GET("/hello", func(c *gin.Context) { //注册GET路由
c.JSON(http.StatusOK, gin.H{
"message": "Hello world",
})
})
r.GET("/hello/:id", func(c *gin.Context) { //注册GET路由,支持URL参数
id := c.Param("id")
c.JSON(http.StatusOK, gin.H{
"message": "Hello " + id,
})
})
r.Run(":8080")
}
/* test.http
###
GET http://127.0.0.1:8080/hello HTTP/1.1
###
GET http://127.0.0.1:8080/hello/123 HTTP/1.1
*/
其他
- Beego是一个全功能的Web开发框架,采用MVC架构,相对缺点是性能弱,代码结构复杂。
- iris功能比gin丰富,支持MVC,基础功能与gin比较接近,比Beego新,比Beego性能好。
orm 框架
orm 框架有 gorm 和 xorm 等,其中社区活跃度是 gorm。
rpc 框架
net/rpc
net/rpc 是标准库自带rpc框架。使用标准库 encoding/gob 进行编解码,无法跨语言调用。
gRPC
gRPC 是谷歌开发的rpc框架,有以下特点:
- 高性能,基于 HTTP/2协议,利用多路复用、头部压缩等特性,可以实现低延迟高吞吐量。
- 支持 IDL,使用 protobuf 作为接口定义语言。
- 支持跨语言,支持多种语言。
- 支持双向流式RPC。