使用Docker搭建Go开发环境时自定义包导入报错如何解决
解决方案
问题根因
你开启了Go modules模式(GO111MODULE=on),但未在项目代码根目录初始化go.mod模块配置文件,Go无法通过模块路径定位自定义的app/config包,默认去GOROOT路径下查找才触发了报错。
具体操作步骤
- 第一步:本地项目初始化Go模块
进入你本地和main.go同级的app目录,执行以下命令:
执行完成后会在go mod init appapp目录下生成go.mod文件,内容示例如下:module app go 1.21 // 对应你使用的Go版本号 - 第二步:优化Dockerfile配置(可选,建议调整)
你已经通过docker-compose.yml的volumes配置把本地app目录挂载到了容器的/go/src/app路径,不需要提前把代码打进镜像,避免挂载时覆盖引发异常,调整后的Dockerfile如下:FROM golang:latest RUN mkdir -p /go/src/app WORKDIR /go/src/app ENV GO111MODULE=on ENV GOPATH /go - 第三步:重新构建启动容器
回到项目根目录(和docker-compose.yml同级的目录),执行启动命令:docker-compose up -d --build - 第四步:验证运行结果
执行命令进入容器运行代码,验证导入是否正常:docker-compose exec app go run main.go
注意事项
- 确认
app/config/config.go中的包声明为package config,且用到的Config变量首字母大写(Go要求首字母大写的变量才能跨包导出访问) - 后续新增依赖可以直接在本地
app目录下执行go get命令,修改会同步到容器内,不需要重新构建镜像
内容的提问来源于stack exchange,提问作者kkkkgyg
相关产品推荐
相关产品推荐

