Gin

Gin

Go 语言高性能 HTTP 框架,零内存分配路由,适合 REST API

核心功能

Gin 提供 Martini 风格的 API,但借助定制版 httprouter 把性能提升到最多 40 倍,路由过程不产生堆分配。适合高吞吐 REST API、微服务,以及需要低响应延迟的 Go 后端服务。

功能亮点

基准数据可查

官方 GithubAll 基准中 27364 ns/op、0 次堆分配,明显优于 Beego、GorillaMux 等框架

gin.Default() 自带两件套

默认路由器已装好 logger 与 recovery 中间件,起步就有访问日志和崩溃兜底

gin.H 写 JSON 很省事

c.JSON(http.StatusOK, gin.H{...}) 一行返回结构化响应,不用先定义响应结构体

路由分组管公共逻辑

把同类接口归到一个 group,统一挂鉴权、限流等中间件,避免逐条路由重复注册

中间件生态成体系

官方 gin-contrib 提供 JWT、Session、CORS、限流、压缩、静态文件等现成组件

适用场景

• 高吞吐的 REST API 服务,需要在大量并发下保持低延迟
• 微服务后端,用中间件统一处理鉴权、日志与链路追踪
• 用最少样板代码快速搭起 Go Web 服务原型

安装配置

bash
前置条件:Go 1.25 或更高版本,且 go 命令在 PATH 中可用。

新建项目并初始化 Go module:
mkdir gin-quickstart && cd gin-quickstart
go mod init gin-quickstart

添加 Gin 依赖:
go get -u github.com/gin-gonic/gin

在代码中导入即可(Go module 会在构建时自动拉取):
import "github.com/gin-gonic/gin"

使用方法

go
新建 main.go:
package main

import (
  "github.com/gin-gonic/gin"
  "net/http"
)

func main() {
  router := gin.Default()

  router.GET("/ping", func(c *gin.Context) {
    c.JSON(http.StatusOK, gin.H{
      "message": "pong",
    })
  })

  router.Run() // 默认监听 0.0.0.0:8080
}

运行服务:
go run main.go

访问 http://localhost:8080/ping ,会返回:
{"message":"pong"}

关键指标

尚未核验对标产品,此处只列本工具自身指标,不做对比结论。

指标Gin
价格免费
开源
上手难度进阶

相关工具

同类工具

优点

  • 路由基于定制 httprouter,官方基准中做到 0 B/op、0 allocs/op 的零堆分配
  • gin.Default() 默认挂载 logger 与 recovery,panic 不会导致进程崩溃
  • 请求 JSON 绑定与校验、路由分组、集中错误管理都在框架内,少写一层胶水代码
  • gorush、fnproject、photoprism、lura 等生产项目在用,中间件生态由 gin-contrib 维护

缺点

  • 要求 Go 1.25 或以上,环境版本偏旧时需要先升级 Go 工具链
  • 只解决 HTTP 层的问题,ORM、配置管理、依赖注入等都要自己选型拼装
  • 上手前需要具备 Go 语法与 go module 依赖管理的基础