Go 服务端 HTTP 框架全景

从标准库 net/http 到 Gin、Echo、Fiber、Chi,再到微服务框架 go-zero、Kratos、Hertz——讲清 Go 生态里到底有哪些服务端框架、它们各自定位是什么、底层差在哪、治理能力差在哪,以及你该怎么选

数据口径:GitHub Stars / 吞吐量为 2026 年公开资料的区间估计,仅供趋势参考;生产环境请以你自己的实测为准。
net/http 是地基 Gin 最流行 Fiber 最快但有代价 go-zero 是微服务全家桶
1
生态概览:先分清「框架」的两种含义
Go 的「服务端框架」其实分两个截然不同的阵营,混在一起比会越比越糊涂。

Go 能在后端占据一席之地,靠的是:编译成机器码(无 JVM/解释器开销)、goroutine 让并发极简、单文件二进制部署、内存占用低且冷启动快(天生云原生)。当你说「Go 的 HTTP 框架」时,通常指两类东西:

① 路由型 / Web 框架

只解决「HTTP 请求怎么路由、怎么写 handler、怎么挂中间件」。典型:Gin、Echo、Fiber、Chi。它们本质是更好用的 net/http 封装,不关心服务治理。

② 微服务框架

在路由之上,额外提供服务发现、负载均衡、熔断限流、链路追踪、配置中心、代码生成、多协议(HTTP+gRPC)。典型:go-zero、Kratos、Hertz/Kitex。它们是「全家桶」。

一句话结论:如果你只想写几个 API,Gin/Chi/Echo 足够;如果你要做多服务、要注册发现、要限流熔断、要 gRPC,那该看的是 go-zero / Kratos 这类微服务框架——它内部照样用 HTTP 路由,但能力维度完全不在一个层级。
图 1 · Go 服务端框架的分层生态:net/http 是地基,上面长着两类框架
net/http(标准库地基) 路由型 / Web 框架 Gin · Echo · Fiber · Chi 微服务框架 go-zero · Kratos · Hertz/Kitex 仅解决路由 / handler / 中间件 + 发现/熔断/限流/追踪/代码生成/多协议
2
地基:标准库 net/http 你绕不过去
所有「路由框架」都建立在 net/http 之上。先懂它,才看得懂框架在帮你省什么。

Go 标准库自带一个完整、够用的 HTTP 实现。绝大多数第三方框架(Gin、Echo、Chi)都基于 net/http 的 http.Handler 接口,只是把路由匹配、中间件、绑定校验等重复劳动包起来。所以「学框架前先懂 net/http」不是情怀,是性价比最高的投资。

net/http 提供什么 ├── http.Handler / HandlerFunc 一切的请求处理契约 ├── http.ServeMux 内置的多路复用器(路由表) ├── http.Request / http.ResponseWriter 请求与响应 ├── http.Server ListenAndServe / 优雅关闭 / TLS ├── http.Client 调别人 / 微服务间调用 └── 中间件 = 函数套函数(decorator 模式)

一个最朴素的 net/http 服务

// 标准库就能跑起一个 HTTP 服务,无需任何第三方依赖
package main

import (
    "fmt"
    "net/http"
)

func main() {
    mux := http.NewServeMux()
    mux.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprint(w, "Hello, Go!")
    })

    // ListenAndServe 起服务;:8080 是监听地址
    if err := http.ListenAndServe(":8080", mux); err != nil {
        panic(err)
    }
}
net/http 的局限(也是框架存在的理由):
  • 路由只有精确匹配 + 最简单的前缀,没有 /users/{id} 这种参数化路由、没有正则路由;
  • 没有中间件链、没有 JSON 自动绑定/校验、没有统一错误处理;
  • 大项目里这些要自己写一遍又一遍 → 框架把它们标准化了。
值得记的冷知识:因为 Gin/Echo/Chi 都实现 http.Handler,所以它们能无缝接入所有基于 net/http 的生态——otelhttp、AWS Lambda Go runtime、各类反向代理、Prometheus middleware 都能直接复用。这是 Go 框架「兼容性天花板」高的根本原因。
3
轻量级 HTTP 框架四巨头
日常写 API / 单体服务,90% 的场景在这四个里选。核心差异在「底层用的是 net/http 还是 fasthttp」。

🌟 Gin 路由框架 最流行

GitHub ~86k★ · 基于 net/http(httprouter 风格 radix tree)· ~50–70k req/s

定位:Go 生态「默认选项」「安全牌」。如果你不知道选啥,选 Gin 大概率没错。
优点:三行起服务、中间件生态最成熟(日志/CORS/限流/鉴权应有尽有)、社区庞大、背靠标准库兼容性无忧。
缺点:不够 opinionated,大项目容易变乱;没有内置依赖注入;context 风格有人不喜欢。

package main
import "github.com/gin-gonic/gin"

func main() {
    r := gin.Default()   // 默认带 Logger + Recovery 中间件
    r.GET("/user/:id", func(c *gin.Context) {
        id := c.Param("id")          // 取路径参数
        c.JSON(200, gin.H{"id": id}) // 自动序列化为 JSON
    })
    r.Run(":8080")
}

🔷 Echo 路由框架 均衡

GitHub ~31k★ · 基于 net/http · 内置校验/绑定 · ~50–65k req/s

定位:「没有明显短板的老兵」,比 Gin 更结构化,适合团队协作的中大型项目。
优点:代码结构清晰、内置数据绑定与验证器、文档质量高、生产验证多年。
缺点:生态比 Gin 小;高级特性常需额外引库;性能不如 Fiber。

package main
import "github.com/labstack/echo/v4"

func main() {
    e := echo.New()
    e.GET("/user/:id", func(c echo.Context) error {
        return c.JSON(200, map[string]string{"id": c.Param("id")})
    })
    e.Start(":8080")
}

⚡ Fiber 路由框架 最快但有代价

GitHub ~38k★ · 基于 fasthttp(非 net/http) · ~70–110k req/s

定位:「Go 里的 Express.js」,为从 Node.js 转来的开发者设计,API 极像 Express。
优点:性能标杆、对 Node 开发者零学习曲线、内置限流/压缩/缓存丰富。
致命代价:fasthttp 而非 net/http → 不兼容大量 Go 库、没有 HTTP/2、没有 http.Hijacker 等标准接口、多数可观测性库跑不起来。

package main
import "github.com/gofiber/fiber/v2"

func main() {
    app := fiber.New()
    app.Get("/user/:id", func(c *fiber.Ctx) error {
        return c.JSON(fiber.Map{"id": c.Params("id")})
    })
    app.Listen(":8080")
}

🌿 Chi 路由框架 极简/地道

GitHub ~20k★ · 纯 net/http、零第三方依赖 · ~45–60k req/s

定位:它自称「路由器」不是「框架」——只做路由分发 + 中间件嵌套,其余(ORM/校验/模板)全靠你自己组合。
优点:极轻量、完全基于 net/httpClean Architecture 完美搭档、测试容易。
缺点:对新手不友好,基础设施要自己搭;没有 ORM/校验器,小项目起步慢。

package main
import (
    "net/http"
    "github.com/go-chi/chi/v5"
    "github.com/go-chi/chi/v5/middleware"
)
func main() {
    r := chi.NewRouter()
    r.Use(middleware.Logger, middleware.Recoverer)  // 中间件链
    r.Get("/user/{id}", func(w http.ResponseWriter, req *http.Request) {
        id := chi.URLParam(req, "id")            // 取参数走标准库风格
        w.Write([]byte("user: " + id))
    })
    http.ListenAndServe(":8080", r)
}
图 2 · 底层差异是四巨头的分水岭:Fiber 走 fasthttp,其余三家走 net/http
Gin Echo Chi Fiber net/http fasthttp → 兼容性天花板高,可复用全部 net/http 生态 → 快,但脱离标准库生态
benchmark 真相:那些 10 万+ req/s 的数字多是「Hello World 级别」压测(无 DB、无鉴权、无 TLS)。真实业务里 95% 的瓶颈在数据库和外部调用,框架间 30% 的裸吞吐差常常完全看不见。选型别被数字带节奏,先看团队和场景。
4
全栈 / MVC 框架:要一站式的看这里
如果你想要「Django / Spring Boot 那种开箱即用」,而不是自己拼中间件,看 Beego、Iris。

🐝 Beego 全栈 MVC

GitHub ~32k★ · 类 Django 的一站式 · ~20–40k req/s

提供:MVC 架构、内置 ORM、自动化 API 文档、CLI 脚手架、Session、模板引擎。
适合:中大型单体、想少做架构决策、团队熟悉 Spring Boot/Django。
代价:性能偏低、相对重、社区热度不及 Gin。

🌐 Iris 全功能

GitHub ~25k★ · 功能密度高、文档全

提供:类似 Beego 的全功能集合,但 API 设计更现代,性能也更好。
适合:想要「一个框架搞定全部」又不想用 Beego 风格的人。
代价:功能多意味着学习面更大,约定也不如 Gin 轻。

微服务时代它们还香吗? 全栈 MVC 框架在「单体应用」里很省心,但在以「拆小服务 + 各自技术选型」为潮流的云原生场景里,光环被 Gin(轻路由)+ 自选组件 或 go-zero(微服务全家桶)分流了。新项目除非明确要 MVC 一站式,否则较少首选 Beego/Iris。
5
微服务框架:go-zero 们解决的是另一层问题
当你的「服务」不止一个、还要互相发现、要扛雪崩、要追链路——路由框架就不够了。
微服务框架 ≠ 更快的 HTTP 框架。它们的价值在「服务治理 + 代码生成 + 多协议」。一个微服务框架必然包含 HTTP 路由能力,但重点是下面这些普通框架没有的东西:
  • 服务发现 & 负载均衡:服务怎么找到彼此(etcd / consul / k8s),怎么选节点(P2C 等);
  • 熔断 & 限流 & 降级:防止一个服务挂了拖垮全局(雪崩);
  • 链路追踪:一次请求跨多个服务,traceId 怎么传;
  • 配置中心:配置热更新、多环境隔离;
  • 代码生成:用 .api / .proto / SQL 声明契约,自动生成 handler/logic/model 骨架;
  • 多协议:同时支持 HTTP(对外)和 gRPC(内部高性能 RPC)。

⚙️ go-zero 微服务

GitHub ~32k★ · 腾讯开源 · rest + zrpc(gRPC)

核心卖点:「自带服务治理的微服务全家桶」。内置服务发现、熔断限流、Prometheus 指标、goctl 代码生成(写 .api 生成全套骨架)。
适合:从 0 搭微服务、想要「约定优于配置」、重视稳定性的团队。
代价:有学习曲线和自己的目录约定(本系列已专门讲解)。

🛡️ Kratos 微服务

GitHub ~25k★ · B 站开源 · HTTP/gRPC

核心卖点:强工程化、依赖注入(wire)、清晰的分层、配置/日志/追踪抽象好。
适合:重视架构整洁、愿意用 DI、团队有 Go 工程底蕴。
代价:概念更多,上手比 go-zero 慢一点。

🚀 Hertz / Kitex 微服务

字节开源 · Hertz=HTTP / Kitex=gRPC

核心卖点:极致性能、Netpoll 网络库、与 Kitex 搭配做内部 RPC。
适合:超高吞吐、已在字节技术栈里、愿意追新。
代价:生态与文档成熟度相比 go-zero 略新。

图 3 · 普通 HTTP 框架 vs 微服务框架:能力维度完全不同
路由型框架(Gin/Chi/Echo) ✓ 路由 / 参数绑定 ✓ 中间件链 ✓ JSON 校验 ✗ 服务发现 ✗ 熔断/限流 ✗ 代码生成 微服务框架(go-zero 等) ✓ 上面全部 + ✓ 服务发现 / 负载均衡 ✓ 熔断 / 限流 / 降级 ✓ 链路追踪 / 指标 ✓ goctl 代码生成 ✓ HTTP + gRPC 双协议
6
横向对比表:一张表看清差异
设计哲学、底层、性能、生态、治理、DI、代码生成、协议、学习曲线——九维横评。
维度GinEchoFiberChiBeegogo-zeroKratos
类型路由路由路由路由全栈微服务微服务
底层net/httpnet/httpfasthttpnet/httpnet/httpnet/httpnet/http
HTTP/2
吞吐区间50–70k50–65k70–110k45–60k20–40k中高中高
中间件生态最大丰富丰富中等内置内置+可扩展内置+可扩展
依赖注入wire
服务治理部分内置全套内置全套
代码生成CLI 部分goctlproto 生成
多协议仅 HTTP仅 HTTP仅 HTTP仅 HTTP仅 HTTPHTTP+gRPCHTTP+gRPC
学习曲线低~中中~高中~高
最适合通用 API结构均衡极致性能Clean Arch单体 MVC微服务从 0工程化微服务
读表要点:前四个「路由框架」之间差异其实不大(都解决同一层问题),真正的分水岭是 Fiber 的 fasthttp 代价你是否到达「需要服务治理」的规模。一旦需要治理/多协议,就该把目光从 Gin 移到 go-zero / Kratos 这一行。
7
怎么选:决策树 + 一句话建议
没有「最好的框架」,只有「最适合当前场景的」。
图 4 · 选型决策树
新 Go 项目,要啥? 只要几个 API / 单体 多服务 + 治理 团队 Go 水平如何? 新手/混合 老手/专家 → Gin 追求啥风格? 极简/地道 均衡/结构 → Chi → Echo 要不要极致性能? 是(可接受代价) → Fiber → Gin → go-zero / Kratos
Gin
不知道选啥就选它
Fiber
性能优先·Node 背景
Echo
要结构不要负担
go-zero
微服务从 0 起步
务实建议:先用 Gin 把业务跑起来验证逻辑,别在项目第一天纠结框架;等真的出现「服务变多、要注册发现、要限流熔断、要 gRPC」时,再迁移到 go-zero / Kratos。框架切换的成本远小于「早期过度设计」的代价。
8
go-zero 专题:本仓库已讲透的部分
你在 visuals 里已经有一整套 go-zero 教程,这里只做索引,避免重复造轮子。

既然你之前让我在 programming-language/golang 下写了 20+ 篇 go-zero 专题,go-zero 这一栏对你不是新概念。下面这些点在本页上方提到的「微服务框架能力」里都有对应落地:

go-zero 怎么落地「服务治理」

go-zero 怎么落地「工程规范」

本页定位 vs go-zero 系列:go-zero 系列是「怎么用 go-zero 写业务」,本页是「go-zero 在 Go 框架版图里处于什么位置、和 Gin 们差在哪」。两者互补:选型阶段看本页,落地阶段看 go-zero 系列。
9
总结:三句话记住
把上面所有内容压缩成最值得带走的结论。

带走这三条

  1. 地基永远是 net/http。 Gin、Echo、Chi 都建立在它之上,Fiber 是唯一用 fasthttp 的「异类」——快,但脱离标准库生态、没有 HTTP/2。先懂 net/http,框架只是帮你省重复劳动。
  2. 「路由框架」和「微服务框架」是不同层。 Gin/Echo/Fiber/Chi 只管「请求怎么进来、怎么出去」;go-zero/Kratos 还管「服务怎么发现彼此、怎么不被雪崩拖垮、怎么追链路、怎么生成代码」。规模没到,别上微服务框架;到了,别硬扛在 Gin 上。
  3. 没有最好,只有最合适。 通用 API 选 Gin;要极致性能且能接受代价选 Fiber;爱极简地道选 Chi;要结构均衡选 Echo;做微服务从 0 起步选 go-zero(约定优于配置)或 Kratos(工程化+DI)。
常见误区分辨:
  • 「go-zero 是不是比 Gin 快?」——问法本身错位:go-zero 不是用来替代 Gin 跑单接口速度的,它赢在治理与生成,不是裸路由 QPS。
  • 「Fiber 最快所以我全用 Fiber」——除非你确认用不到 net/http 生态(HTTP/2、otel、Lambda、各类代理),否则 fasthttp 的兼容性代价会反咬。
  • 「Beego 过时了」——它没死,只是云原生微服务潮流下被分流;单体 MVC 场景依然省心。
net/http 地基 Gin 默认牌 Fiber 性能怪兽 Chi 极简地道 Echo 均衡老兵 Beego 全栈 MVC go-zero 微服务全家桶 Kratos 工程化 DI