You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

未发布Go模块作为go:generate依赖被go mod tidy移除的解决方案咨询

解决go:generate依赖未发布main模块被go mod tidy移除的问题

问题背景

代码里用//go:generate go run github.com/my_module/config_gen调用未发布版本的工具模块,通过提交哈希拉取后,依赖被标记为indirect,运行go mod tidy或go generate ./...时会被自动移除。尝试导入该main包会触发编译错误,临时给工具模块加空包的方案不够优雅。

可行解决方案

1. 用go mod edit强制标记为非间接依赖

直接通过命令修改go.mod,把目标依赖从间接块移到主依赖块,避免被清理:

go mod edit -require=github.com/my_module/config_gen@5b7a55227345

执行后,go.mod里的该依赖会出现在主require块中,不再带有// indirect注释,go mod tidy就不会再移除它。

2. 添加专门的工具依赖声明文件

在项目根目录创建tools.go文件,内容如下:

//go:build tools
// +build tools

package tools

import (
	_ "github.com/my_module/config_gen"
)
  • //go:build tools和// +build tools是构建约束,确保这个文件不会被包含在主项目的编译过程中,避免导入main包导致的编译错误。
  • 这个文件里的导入会让Go模块将该依赖识别为项目的直接依赖,go mod tidy会保留它,同时完全不影响主代码的编译。

3. 给工具模块发布正式版本(若可行)

如果有权限维护config_gen模块,给它打一个语义化版本标签(比如v0.1.0),然后用版本号拉取依赖:

go get github.com/my_module/config_gen@v0.1.0

这种方式最规范,依赖会被正常识别为直接依赖,后续版本更新也更方便。

内容的提问来源于stack exchange,提问作者cylon86

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 07:22:36