读完这篇,你能分清 Gin、Echo、Beego、Go-Zero、Kratos 各自解决什么问题,并照着命令跑出一个能启动的最小项目。
第一步:先分清两类东西,别拿 Gin 和 Kratos 直接比
它们不在一个层级上:
- Gin:HTTP Web 框架。路由 + 中间件 + Context,最小最灵活,生态最大。
- Echo:HTTP Web 框架。路由能力和 Gin 接近,但内置参数绑定、校验、错误处理更整齐。
- Beego:全栈 MVC 框架。MVC + ORM + 配置 + 管理后台一条龙,像 Go 版的 Django。
- Go-Zero:微服务框架。goctl 代码生成 + api/rpc 双入口 + 内置限流熔断超时 + sql/redis 代码生成。
- Kratos:微服务框架。protobuf 定义接口,gRPC 与 HTTP 双协议,wire 依赖注入。
注意:微服务不是框架决定的,是部署形态决定的。单体项目用 Gin 就够,硬上 Kratos 只会多写几倍样板代码。
第二步:各自跑一个最小服务
先建模块:mkdir demo && cd demo && go mod init demo
Gin
go get github.com/gin-gonic/gin
r := gin.Default()
r.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{"msg": "pong"}) })
r.Run(":8080")
Echo
go get github.com/labstack/echo/v4
e := echo.New()
e.GET("/ping", func(c echo.Context) error {
return c.JSON(200, map[string]string{"msg": "pong"})
})
e.Start(":8080")
Beego
go get github.com/beego/beego/v2
注意:Beego 现在模块路径必须带 /v2。网上老教程里的 github.com/astaxie/beego 是 v1,已经停更,抄错会卡很久。
Go-Zero
go install github.com/zeromicro/go-zero/tools/goctl@latest
goctl api new hello
cd hello && go run hello.go -f etc/hello-api.yaml
Kratos
go install github.com/go-kratos/kratos/cmd/kratos/v2@latest
kratos new kratos-demo
cd kratos-demo && go generate ./... && go run ./cmd/kratos-demo -conf ./configs
跑完你会发现关键差别:前两个是十几行的 main.go;后两个直接生成一整棵目录树(cmd / internal / api / etc)。这个差别就是选型分水岭。
第三步:按场景对号入座
| 场景 | 推荐 |
|---|
| 单体 API、中小项目、快速上线 | Gin 或 Echo |
| 要 ORM + 后台 + 全家桶,团队熟 MVC | Beego |
| 已有多个服务,要 RPC、治理、代码生成 | Go-Zero |
| 接口对外、强契约、gRPC 优先 | Kratos |
三个具体判断点:
- 团队有没有 protobuf 经验。 Kratos 改一个字段要跑
kratos proto client,没经验容易卡在生成链路。
- 要不要服务治理。 Go-Zero 的限流、熔断、超时、链路追踪是配置项;Kratos 靠 middleware 自己选配。
- 项目规模。 只有 3 个接口的项目上 Go-Zero,光配置文件就比业务代码长。
第四步:几个真会踩的坑
注意:Gin 的 c.ShouldBind 和 c.Bind 行为不同,前者校验失败返回 error 交给你处理,后者直接写 400 并中断。混用会出现「错误提示对不上」的问题。
注意:goctl api go 和 kratos proto client 都是「以定义文件为准」的生成器。手改生成出来的代码,下次重新生成会被覆盖。业务逻辑写在 internal/logic 或 service 层,别写进生成文件。
注意:Echo 的大版本号写在 module 路径里(echo/v4)。升级大版本要改 import,直接 go get 拉最新可能导致全项目编译不过。
注意:Beego 的 ORM 和 Go-Zero 的 sqlx 生成物都默认强绑数据库。跑单元测试前先想好怎么 mock,否则每次测试都要连 MySQL。
小结
- Gin / Echo 是路由与中间件库,轻、自由、生态大;Echo 内置的绑定与校验更省事。
- Beego 是全栈 MVC,适合习惯 Django / Rails 那套写法的团队。
- Go-Zero / Kratos 是微服务框架,核心价值是代码生成 + 服务治理 + 契约优先,代价是样板代码和生成链路。
- 选型顺序:先看部署形态(单体还是多服务),再看团队吃不吃 protobuf,最后看要不要内置治理。
- 别用性能决定选型。这五个在真实业务里都跑不满,瓶颈通常在数据库和网络。