Gin Web 框架
Gin 是一个用 Go 编写的 Web 框架。它具有类似于 martini 的 API,但性能最高可提升 40 倍,这要归功于 httprouter。如果你需要高性能和良好的生产力,你会喜欢上 Gin。
Gin 的主要特性包括:
- 零内存分配的路由
- 高速
- 中间件支持
- 崩溃恢复
- JSON 验证
- 路由分组
- 错误管理
- 内置渲染
- 可扩展
入门
前提条件
获取 Gin
借助 Go 的模块支持,当你在代码中添加导入语句时,go [build|run|test]
会自动获取必要的依赖:
import "github.com/gin-gonic/gin"
或者,使用 go get
:
go get -u github.com/gin-gonic/gin
运行 Gin
一个基本示例:
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "pong",
})
})
r.Run() // 监听并在 0.0.0.0:8080 上提供服务(对于 Windows 是 "localhost:8080")
}
要运行代码,使用 go run
命令,如:
$ go run example.go
然后在浏览器中访问 0.0.0.0:8080/ping
查看响应!
查看更多示例
快速入门
通过 Gin 快速入门 学习和实践,其中包含 API 示例和构建标签。
示例
Gin 示例 仓库中提供了许多现成的示例,展示了 Gin 的各种用例。
文档
查看 go.dev 上的 API 文档。
文档也可在 gin-gonic.com 上以多种语言获取:
文章
基准测试
Gin 使用 HttpRouter 的自定义版本,查看所有基准测试。
基准测试名称 | (1) | (2) | (3) | (4) |
---|---|---|---|---|
BenchmarkGin_GithubAll | 43550 | 27364 ns/op | 0 B/op | 0 allocs/op |
BenchmarkAce_GithubAll | 40543 | 29670 ns/op | 0 B/op | 0 allocs/op |
BenchmarkAero_GithubAll | 57632 | 20648 ns/op | 0 B/op | 0 allocs/op |
BenchmarkBear_GithubAll | 9234 | 216179 ns/op | 86448 B/op | 943 allocs/op |
BenchmarkBeego_GithubAll | 7407 | 243496 ns/op | 71456 B/op | 609 allocs/op |
BenchmarkBone_GithubAll | 420 | 2922835 ns/op | 720160 B/op | 8620 allocs/op |
BenchmarkChi_GithubAll | 7620 | 238331 ns/op | 87696 B/op | 609 allocs/op |
BenchmarkDenco_GithubAll | 18355 | 64494 ns/op | 20224 B/op | 167 allocs/op |
BenchmarkEcho_GithubAll | 31251 | 38479 ns/op | 0 B/op | 0 allocs/op |
BenchmarkGocraftWeb_GithubAll | 4117 | 300062 ns/op | 131656 B/op | 1686 allocs/op |
BenchmarkGoji_GithubAll | 3274 | 416158 ns/op | 56112 B/op | 334 allocs/op |
BenchmarkGojiv2_GithubAll | 1402 | 870518 ns/op | 352720 B/op | 4321 allocs/op |
BenchmarkGoJsonRest_GithubAll | 2976 | 401507 ns/op | 134371 B/op | 2737 allocs/op |
BenchmarkGoRestful_GithubAll | 410 | 2913158 ns/op | 910144 B/op | 2938 allocs/op |
BenchmarkGorillaMux_GithubAll | 346 | 3384987 ns/op | 251650 B/op | 1994 allocs/op |
BenchmarkGowwwRouter_GithubAll | 10000 | 143025 ns/op | 72144 B/op | 501 allocs/op |
BenchmarkHttpRouter_GithubAll | 55938 | 21360 ns/op | 0 B/op | 0 allocs/op |
BenchmarkHttpTreeMux_GithubAll | 10000 | 153944 ns/op | 65856 B/op | 671 allocs/op |
BenchmarkKocha_GithubAll | 10000 | 106315 ns/op | 23304 B/op | 843 allocs/op |
BenchmarkLARS_GithubAll | 47779 | 25084 ns/op | 0 B/op | 0 allocs/op |
BenchmarkMacaron_GithubAll | 3266 | 371907 ns/op | 149409 B/op | 1624 allocs/op |
BenchmarkMartini_GithubAll | 331 | 3444706 ns/op | 226551 B/op | 2325 allocs/op |
BenchmarkPat_GithubAll | 273 | 4381818 ns/op | 1483152 B/op | 26963 allocs/op |
BenchmarkPossum_GithubAll | 10000 | 164367 ns/op | 84448 B/op | 609 allocs/op |
BenchmarkR2router_GithubAll | 10000 | 160220 ns/op | 77328 B/op | 979 allocs/op |
BenchmarkRivet_GithubAll | 14625 | 82453 ns/op | 16272 B/op | 167 allocs/op |
BenchmarkTango_GithubAll | 6255 | 279611 ns/op | 63826 B/op | 1618 allocs/op |
BenchmarkTigerTonic_GithubAll | 2008 | 687874 ns/op | 193856 B/op | 4474 allocs/op |
BenchmarkTraffic_GithubAll | 355 | 3478508 ns/op | 820744 B/op | 14114 allocs/op |
BenchmarkVulcan_GithubAll | 6885 | 193333 ns/op | 19894 B/op | 609 allocs/op |
- (1):在恒定时间内达到的总重复次数,越高表示结果越可靠
- (2):单次重复持续时间(ns/op),越低越好
- (3):堆内存(B/op),越低越好
- (4):每次重复的平均分配次数(allocs/op),越低越好
中间件
你可以在 gin-contrib 找到许多有用的 Gin 中间件。
使用案例
以下是一些使用 Gin Web 框架的优秀项目。
- gorush:一个推送通知服务器。
- fnproject:一个容器原生、云无关的无服务器平台。
- photoprism:由 Google TensorFlow 驱动的个人照片管理工具。
- lura:具有中间件功能的超高性能 API 网关。
- picfit:图像调整服务器。
- dkron:分布式、容错的任务调度系统。
贡献
Gin 是数百名贡献者的工作成果。我们感谢你的帮助!
请查看 CONTRIBUTING.md 了解提交补丁和贡献工作流程的详细信息。