找不到包
Attention please!
专注app软件定制开发找不到包是 GOROOT
、 GOPATH
专注app软件定制开发的路径问题,专注app软件定制开发不要再用老的gopath方式创建项目!gomod新建项目,全部由go mod管理!
找不到包是 GOROOT
、 GOPATH
的路径问题,不要再用老的gopath方式创建项目!gomod新建项目,全部由go mod管理!
找不到包是 GOROOT
、 GOPATH
的路径问题,不要再用老的gopath方式创建项目!gomod新建项目,全部由go mod管理!
0 问题
问题:如果是设置configuration中找不到对应的包,项目结构如图所示,在编辑Configuration时报错找不到包
解决方案:
从demo_01
这一级目录打开,而不要在gopath
这一级打开,如下图所示就不会报错找不到了
1 区分几个路径
GOROOT
:Golang的安装路径,安装之后就默认自带了GOPATH
:Golang的工作目录
go_project // (go_project为 GOPATH目录)
– bin // golang编译存放路径
– pkg // golang编译包时,生成的.a文件存放路径
– src // 路径。按照golang默认约定,go run,go install等命令的当前工作路径
出错:
导包运行时出错: package util is not in GOROOT (D:\MyApp\golang\src\util)
只搜索GOROOT环境,而不搜索GOPATH路径
分析:
包管理的问题,import 包,会对应的出现包管理的问题,使用GOPATH
问题
- 代码开发必须在go path src目录下,不然,就有问题。
- 依赖手动管理
- 依赖包没有版本可言
应对包管理:go mod——GO111MODULE
,go modules 是 golang 1.11 新加的特性。
模块是相关Go包的集合。modules是源代码交换和版本控制的单元。 go命令直接支持使用modules,包括记录和解析对其他模块的依赖性。modules替换旧的基于GOPATH的方法来指定在给定构建中使用哪些源文件。
2 GO111MODULE
GO111MODULE
有三个值:off, on和auto(默认值
)
GO111MODULE=off
,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。GO111MODULE=on
,go命令行会使用modules,而一点也不会去GOPATH目录下查找。依赖包的存放位置变更为$GOPATH/pkg,允许同一个package多个版本并存,且多个项目可以共享缓存的 moduleGO111MODULE=auto
,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:
当前目录在GOPATH/src之外且该目录包含go.mod文件当前文件在包含go.mod文件的目录下面。
- 1
- 2
参看文章:
3 解决方案
命令行使用go env
查看环境,明显GO11MODULE没有设定
方案一:关闭 go mod 模式
用 gopath 模式引入包从src目录下开始引入,需要
go env -w GO111MODULE=off
- 1
方案二:使用go mod 模式
go env -w GO111MODULE=on
- 1
并且在目录下执行 go mod init
目录下产生两个文件
go.modgo.sum
- 1
- 2
否则就会报错找不到包
参考: