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

使用Nix构建Go项目报错:GO111MODULE=off导致模块被禁用

使用Nix构建Go项目时"modules disabled by GO111MODULE=off"错误的解决方法

问题场景

尝试用Nix构建Go项目,配置文件test3.nix内容如下:

buildGoPackage {      
  name = "site";     
  goPackagePath = "git@github.com:username/rep.git";    
  src = fetchGit{      
       url = "git@github.com:username/rep.git";     
  }; 
}

执行构建命令:

nix build -f test3.nix

出现报错,错误日志最后8行:

unpacking sources
unpacking source archive /nix/store/l1gsllgg693s46sk7b7qiwbnjysnbbz6-source
source root is source
patching sources
configuring
building
Building subPackage git@github.com:user/rep.git
go: modules disabled by GO111MODULE=off; see 'go help modules'

解决方法

方法1:为buildGoPackage启用Go Modules

buildGoPackage默认关闭Go Modules,需显式开启并调整配置:
修改test3.nix为:

buildGoPackage {      
  name = "site";     
  goPackagePath = "github.com/username/rep";  # 替换为Go模块的标准路径,不要用SSH格式
  src = fetchGit{      
       url = "git@github.com:username/rep.git";     
  };
  goDeps = ./deps.nix;  # 需提前生成依赖描述文件
  buildFlagsArray = [ "-mod=vendor" ];  # 项目用vendor目录时使用,否则可改为"-mod=readonly"
  GO111MODULE = "on";  # 强制开启Go Modules
}

生成deps.nix的命令:

cd 项目源码目录
nix-shell -p goPackages.dep2nix --run "dep2nix > deps.nix"

方法2:改用buildGoModule(推荐)

buildGoPackage是旧工具,现代Go项目更适合用buildGoModule,它原生支持Go Modules,配置更简洁:

buildGoModule {      
  pname = "site";     
  version = "0.1.0";  # 填写项目版本号
  src = fetchGit{      
       url = "git@github.com:username/rep.git";
       rev = "xxx";  # 可选,指定要构建的commit哈希
       sha256 = "xxx";  # 首次运行nix build时会提示缺失,复制提示的哈希值填入即可
  };
}

使用buildGoModule时,Nix会自动解析项目的go.mod和go.sum来处理依赖,无需手动生成deps.nix。

关键注意事项

  • goPackagePath必须是项目go.mod中定义的模块名(如github.com/username/rep),不能使用SSH格式的git@github.com:...,否则Go无法识别模块路径。
  • 如果项目使用vendor目录,确保src包含该目录;使用buildGoModule时可通过vendorSha256指定校验值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:30:50