使用Bazel构建时遇到缺失严格依赖错误的求助
解决Bazel构建Go项目时
slices依赖缺失的问题 问题分析
报错显示external/io_ariga_atlas/sql/migrate包中的代码引入了slices,但Bazel构建时未找到对应的依赖。slices包在Go生态中有两个来源:
- Go 1.21及以上版本的标准库
- Go 1.21之前的
golang.org/x/exp/slices实验包
解决方案
方案1:确认并升级Go SDK版本(推荐)
- 检查Bazel使用的Go SDK版本:
bazel query @go_sdk//:version --output=template --template="{{.}}" - 如果版本低于1.21,在WORKSPACE文件中指定Go 1.21+的SDK:
go_register_toolchains(version = "1.21.0") - 修改
external/io_ariga_atlas/sql/migrate/BUILD.bazel中的go_library规则,添加标准库依赖:go_library( name = "migrate", srcs = glob(["*.go"]), importpath = "ariga.io/atlas/sql/migrate", deps = [ # 保留原有依赖 "@go_sdk//slices", ], )
方案2:添加golang.org/x/exp/slices依赖(兼容旧Go版本)
- 在WORKSPACE文件中引入
golang.org/x/exp仓库:http_archive( name = "org_golang_x_exp", urls = ["https://github.com/golang/exp/archive/refs/tags/v0.0.0-20230809160819-4c666bf0b079.zip"], strip_prefix = "exp-4c666bf0b079", sha256 = "替换为对应版本的sha256校验值", ) - 修改
external/io_ariga_atlas/sql/migrate/BUILD.bazel中的依赖:go_library( name = "migrate", srcs = glob(["*.go"]), importpath = "ariga.io/atlas/sql/migrate", deps = [ # 保留原有依赖 "@org_golang_x_exp//slices", ], )
方案3:使用Gazelle自动生成依赖
如果项目用Gazelle管理Go构建规则,直接运行以下命令让Gazelle自动补全缺失的依赖:
bazel run //:gazelle
验证修改
执行原构建命令确认问题解决:
bazel build //cmd/todo:todo
内容的提问来源于stack exchange,提问作者reactor
相关产品推荐
相关产品推荐

