Fiber框架需Go 1.21+环境,Mac推荐brew install go;Redis在Docker中须用host.docker.internal:6379而非localhost;client必须在main中初始化并Ping验证,通过c.Locals注入,且所有操作须传c.Context()。

Fiber 框架本身不“安装”,它是个 Go 包,直接 go get 就行;Mac 上真正要确认的是 Go 环境、Redis 连接地址、以及 Docker 网络是否配对。
Go 环境必须是 1.21+,且 GOPATH 不再关键
Mac 上用 Homebrew 装 Go 最稳:
brew install go
验证版本:
go version
输出必须是 go1.21.x 或更高——Fiber v3 要求 Go 1.21+,低于这个版本会编译失败。别信“我装了 Go 就能跑 Fiber”,go mod init 后 go run main.go 报错第一眼先看 go version。GOPATH 在 Go 1.16+ 已默认关闭,go mod 是唯一依赖管理方式,不用手动设 GOPATH。
Redis 地址别写 localhost:6379
如果你的 Redis 跑在 Mac 本机(比如用 brew services start redis),Fiber 应用又跑在 Docker 容器里(常见于本地开发),那 localhost:6379 指向的是容器自己,不是你的 Mac。必须改成:
-
host.docker.internal:6379—— Docker Desktop for Mac 默认支持,开箱即用 - 如果用 Colima 或其他容器运行时,需额外配置 DNS 映射,否则连不上
- 纯本地运行(Fiber 和 Redis 都不进 Docker)才可用
127.0.0.1:6379
硬编码地址容易漏改,建议从环境变量读取:redis://$REDIS_ADDR,启动时传 REDIS_ADDR=host.docker.internal:6379。
初始化 Fiber + Redis client 的正确顺序
不能在 handler 里 new client,也不能在 init() 函数里用 context.Background() 初始化 Redis client。正确流程只有这一条路径:
- 在
main()函数开头,fiber.New()之前,调用redis.NewClient()构建 client - 显式设置连接池:
PoolSize: 30、MinIdleConns: 5、ConnMaxIdleTime: 5 * time.Minute - 立刻用
rdb.Ping(ctx).Err()测试连通性,失败就panic,别等第一个请求才暴露 - 把 client 存进
app.Use(func(c *fiber.Ctx) error { c.Locals("rdb", rdb); return c.Next() }) - handler 中通过
c.Locals("rdb").(*redis.Client)取出使用,所有操作都传c.Context()(它自带超时)
漏掉 Ping 验证或把 client 塞进全局变量,上线后大概率遇到连接耗尽或 context timeout 不生效的问题。
最常被跳过的细节:Fiber 的 c.Context() 是带 cancel 的,但你得主动用它——比如 rdb.Get(c.Context(), "key"),而不是 rdb.Get(context.Background(), "key"),后者会导致超时完全失效,Redis hang 住整个 goroutine。


















