Skip to main content

工程与依赖管理

模块依赖怎么加、怎么收干净,以及和容器部署的衔接。

go get 与 go mod tidy

go get github.com/some/lib@v1.2.3
go get github.com/some/lib@latest
go mod tidy # 按源码引用增删依赖,并维护 go.sum
go list -m all # 查看模块图
  • go.mod:声明模块路径、Go 版本、require 依赖
  • go.sum:依赖内容校验和,应提交到版本库
  • 升级大版本(路径含 /v2 等)要改 import 路径,不只是改版本号

删除代码里的引用后执行 go mod tidy,无用依赖才会从 go.mod 消失。

版本选择直觉(MVS)

Go 使用最小版本选择(Minimal Version Selection)

  • 构建取各依赖约束中的最小满足版本,而不是「尽量最新」
  • 结果更可复现,依赖图更简单
  • 需要新特性时显式 go get 升到目标版本

go.mod 里的 go 1.22 表示该模块使用的语言/工具链版本约定;本地工具链应兼容。

工作区与多模块

单仓库多模块时,可用 workspace

go work init ./services/api ./pkg/common

生成 go.work(通常不提交或按团队约定;本地联调友好)。小项目一个 go.mod 足够,不必过早拆模块。

替换依赖调试:

replace example.com/lib => ../lib

临时本地替换很有用;合并前记得确认是否仍需要。

与 Docker 的衔接

容器里常用官方镜像编译/运行:

FROM golang:1.22-alpine AS build
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -o /out/app .

FROM alpine:3.20
COPY --from=build /out/app /app
ENTRYPOINT ["/app"]

要点:先拷 go.mod/go.sum 以利用层缓存;生产二进制常用 CGO_ENABLED=0 静态链接。更完整的镜像与 Compose 通识见工程实践「Docker 基础」。

小结

  1. go get 加依赖,go mod tidy 收敛,go.sum 入库
  2. MVS:可复现优先,升级要显式
  3. 多模块再用 go work;单模块别过度设计
  4. Docker 多阶段构建 + 依赖层缓存是常见部署姿势

上一篇:测试与工具 · 下一篇(应用):应用实践