使用Go Module在Heroku构建Go应用时如何配置项目根目录
Heroku 部署src目录存放Go源码的可行配置
Heroku Go buildpack 默认读取仓库根目录的go.mod文件执行构建,源码全部移到src子目录后,buildpack无法在根目录定位模块定义文件,就会触发部署错误,可通过以下两种方案实现目标目录结构下的正常部署:
方案1:配置构建目录环境变量(推荐,零代码结构改动)
- 给Heroku应用添加配置变量
GO_BUILD_DIR=src,该参数会指定Go buildpack将src目录作为模块根目录,自动进入该路径查找go.mod、执行编译流程,完全不需要调整现有src目录下的代码和go.mod配置。 - 配置方式任选其一:
- 本地安装Heroku CLI后执行命令:
heroku config:set GO_BUILD_DIR=src -a 你的Heroku应用名 - 登录Heroku控制台,进入对应应用的Settings - Config Vars页面,手动添加键为
GO_BUILD_DIR、值为src的配置项。
- 本地安装Heroku CLI后执行命令:
- 配置完成后重新推送代码即可完成部署。
方案2:根目录配置模块映射(无需修改平台侧配置)
如果不想调整Heroku平台配置,可以在仓库根目录(和README.md、src文件夹同级)新建go.mod文件,通过replace指令关联子目录源码:
- 根目录
go.mod参考内容:
module your-project-root go 1.18 replace xxx => ./src
- 配置注意事项:
- 根目录
go.mod声明的Go版本要和src/go.mod中指定的版本保持一致 replace后的模块名必须和src/go.mod里定义的module名完全匹配- 根目录添加
Procfile文件,启动命令中明确对应二进制的构建路径即可
注意:该方案需要保证根目录与子目录
go.mod的依赖版本完全一致,否则构建时会出现依赖冲突。
内容的提问来源于stack exchange,提问作者Carson
相关产品推荐
相关产品推荐

