生产环境必须用fiber.new()替代fiber.default(),因其默认挂载的logger等中间件会泄露authorization等敏感头、增加0.3–0.8ms ttfb延迟,并导致strictrouting下路径匹配异常。

上线前必须换掉 fiber.Default()
生产环境用 fiber.Default() 等于主动给日志系统喂毒——它默认挂载 Logger、Recover、RequestID 三个中间件,每秒几百次完整请求日志(含 Authorization 头)会直接压垮磁盘 I/O。实测在 4 核 8G 环境下,首字节时间(TTFB)增加 0.3–0.8ms,高并发时不可忽略。
- 开发阶段可用
fiber.Default()快速验证逻辑 - 上线前必须切为
fiber.New(),再按需手动加中间件 - 真要日志,用采样式(比如只记录 error)或对接结构化日志系统,别碰
fiber.Logger()
go build 交叉编译要注意 CGO_ENABLED=0
Fiber 底层依赖 fasthttp,而 fasthttp 在禁用 CGO 时性能更稳、二进制更小、部署更干净。Windows/Linux/macOS 之间交叉编译,必须显式关掉 CGO,否则可能因 libc 兼容问题启动失败。
初始化并管理阿里云SDK Go 客户端,涵盖 sync.Once 单例、goroutine 安全、endpoint 与 region 配置、VPC 端点及调试。
- Linux 部署:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o server main.go - Windows 部署:
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o server.exe main.go - macOS 部署:
CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -o server main.go - 不加
CGO_ENABLED=0可能导致二进制在目标系统上 panic: “failed to load system cert pool”
Docker 镜像应使用多阶段构建 + Alpine 基础镜像
直接用 golang:alpine 构建并运行,镜像体积大、含编译工具链、存在安全风险。推荐多阶段:第一阶段用完整 golang 镜像编译,第二阶段用 alpine:latest 或 scratch 运行,最终镜像可压到 10MB 以内。
- 关键点:第二阶段不要复制
/etc/ssl/certs——fasthttp默认不走系统证书池,若需 HTTPS 客户端调用,应显式加载证书 - 务必在
FROM alpine:latest后加RUN apk add --no-cache ca-certificates,否则出站 HTTPS 请求会失败 - 入口命令写成
CMD ["./server"],路径必须与COPY目标一致,别漏掉.前缀
StrictRouting 导致的 404 不是 bug,是配置没对齐
/users 和 /users/ 在 Fiber 中默认是两条独立路由,因为 StrictRouting: true 是硬编码默认值。你只注册了前者,后者必然 404——这不是框架缺陷,而是你没声明清楚意图。
- 错误做法:全局设
StrictRouting: false,会导致/users/:id被/users意外匹配,c.Params("id")拿不到值 - 推荐做法一:显式注册两个路径,
app.Get("/users", handler)和app.Get("/users/", handler) - 推荐做法二:加一层重定向中间件,把结尾带斜杠的请求
301跳转到无斜杠版本,统一入口 - 别在
ctx.Next()后写响应——一旦ctx.Send()或ctx.JSON()执行,后续 handler 就不会触发
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










