依赖管理与版本
依赖管理常用命令有哪些? 各有什么作用?
- 依赖调整:
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 之后的稳定兼容承诺;