用途:把 Go(Gin/net/http)服务加固到可上生产的程度,强调进程在 SIGTERM 下可预测、可观测且有边界限制。
主要能力:启动与配置方面,在 main 中一次性读取环境变量或文件,使用类型化 struct,缺少 DATABASE_URL 或 secret 时直接失败,不在 handler 中读 env;生产环境用 log/slog 输出 JSON,日志级别由 LOG_LEVEL 控制,示例变量包括 APP_ENV=production、LISTEN_ADDR=0.0.0.0:8080。进程与关闭方面,使用自建 http.Server(含 ReadHeaderTimeout、IdleTimeout),而非仅 r.Run();收到 SIGINT/SIGTERM 后以带超时的 Shutdown(ctx)(如 30s)关闭,先关 listener 再关 DB 连接池;后台 goroutine 用 errgroup 加 ctx,在关闭时取消;ListenAndServe 放在 goroutine,main 等待信号。健康检查提供 /live(进程存活)与 /ready(关键依赖如 DB ping),liveness 不应因 DB 短暂抖动而杀 pod,端点无鉴权且 body 不暴露内部信息。超时与韧性方面,所有 HTTP/DB 客户端使用 context.WithTimeout,Gin 用 MaxBytesReader 或中间件限制 body,仅对幂等且瞬态错误做带退避和抖动的重试,连接池 SetMaxOpenConns 与实例数及 DB max_connections 对齐,不在 handler 中 log.Fatal。可观测性方面,slog 记录 request_id、method、path、status、latency,不含 PII 与 secret;若团队已用 Prometheus 则加延迟、5xx、in-flight 指标,已有 OpenTelemetry 才用,不新增技术栈;net/http/pprof 放在内部或受保护端口,绝不公开到互联网。安全方面使用项目安全中间件设置 nosniff、frame、TLS 后的 HSTS 等头,显式配置 CORS,有负载均衡时设置 SetTrustedProxies,Gin 中 panic recover 返回 500 并记录日志而不终止进程。构建与运行时建议 CGO_ENABLED=0,镜像参考 docker 技能,GOMAXPROCS 与 cgroup 对齐,Kubernetes 中 preStop 与 terminationGracePeriodSeconds 需大于 Shutdown 超时。
限制与反模式:避免生产中使用 gin.Default() 彩色日志、缺少 Shutdown、公开 /debug/pprof、对非幂等 POST 重试、健康检查查询过多依赖导致永久假阴性。具体安装命令与代码示例资料未提供。