最近公司上线了一个新的监控系统,后端用的是Go写的,一开始没太在意框架选型,想着直接用标准库net/http搞定。结果接口一多,路由管理开始乱套,中间件也堆得像面条一样,改个日志格式都得翻半天代码。
从标准库到框架:不是炫技,是省事
后来同事推荐上了Gin,上手第一天就感觉顺了。写个路由特别干净,比如:
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{"message": "pong"})
})
r.Run(":8080")
}几行代码就能跑起一个带JSON响应的接口,调试起来也方便。以前写个类似功能,光是处理Content-Type和编码就得折腾一阵。
中间件机制让运维更轻松
最实用的是中间件。我们加了个简单的请求耗时统计,代码往那里一放,所有接口自动带上日志:
r.Use(func(c *gin.Context) {
start := time.Now()
c.Next()
latency := time.Since(start)
log.Printf("%s %s %v", c.Request.Method, c.Request.URL.Path, latency)
})这种模式对运维特别友好。出问题了看日志就知道哪个接口慢,不用一个个去查。再加上Panic恢复、JWT鉴权这些现成中间件,省了不少重复劳动。
性能不是数字游戏,是真实体验
之前用Python写过类似的API服务,扛住100并发就得开好几个实例。换成Gin之后,单实例轻松应对,服务器资源占用少了一半。省下来的机器可以给其他业务用,老板看了报表直点头。
别被“全功能”迷惑
也试过一些大而全的框架,功能确实多,但文档看不懂,社区没人回帖。最后还是回到Gin和Echo这类轻量级的。对我们这种小团队来说,上手快、文档清楚比啥都重要。出了问题能自己修,不依赖大厂支持。
现在新项目基本默认上Gin,部署脚本都写好了,一条命令拉代码、编译、启动,运维操作简单了,半夜报警也少了。