跳到主要内容

依赖管理与版本

依赖管理常用命令有哪些? 各有什么作用?​

  • 依赖调整: go get 指定模块及版本来修改依赖图,@none 删除目标要求;go mod tidy 根据源码导入补齐或清理,执行后应审查 go.mod 与 go.sum;
go get github.com/google/uuid@latest # 添加或升级到最新版本
go get github.com/google/uuid@none # 删除指定依赖
go mod tidy # 根据 import 补齐和清理依赖

Module 主版本规则是什么? v0、v1 与 v2+ 有何区别?​

  • v0: 初始阶段, 兼容性不稳定;
  • v1: 默认稳定主版本, import path 不需要版本后缀;
  • v2+: 主版本通常体现在 module path 中, 例如 /v2;
// v1 常见路径:模块根路径不带 /v1。
import "example.com/lib"
// v2 常见路径:主版本成为导入路径的一部分。
import libv2 "example.com/lib/v2"
  • 版本共存: 不同主版本具有不同导入路径,可在一个项目中并存以逐步迁移;历史模块兼容规则存在例外,不能只根据版本号拼接路径;

语义化版本 X.Y.Z 如何表达 API 兼容性?​

  • Semantic Versioning: 语义化版本,用 X.Y.Z 表达公开 API 的兼容性承诺;

  • major version: 主版本;公开 API 出现不兼容变更时递增 X;

  • minor version: 次版本;以向后兼容方式增加功能时递增 Y;

  • patch version: 修订版本;只做向后兼容的问题修复时递增 Z;

  • 判断依据: 版本级别取决于公开 API 的兼容性,不取决于代码改动量或功能大小;

  • 递增示例: 1.4.2 → 1.4.3 表示兼容修复,1.4.2 → 1.5.0 表示兼容新增,1.4.2 → 2.0.0 表示破坏公开 API 的变更;

  • 重置规则: 递增主版本时次版本与修订版本归零,递增次版本时修订版本归零;v0 阶段不应假定具有 v1 之后的稳定兼容承诺;