专注app软件定制开发Go运行报错找不到包:package xxx is not in GOROOT

找不到包

Attention please!

专注app软件定制开发找不到包是 GOROOTGOPATH专注app软件定制开发的路径问题,专注app软件定制开发不要再用老的gopath方式创建项目!gomod新建项目,全部由go mod管理!

找不到包是 GOROOTGOPATH的路径问题,不要再用老的gopath方式创建项目!gomod新建项目,全部由go mod管理!

找不到包是 GOROOTGOPATH的路径问题,不要再用老的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问题

  1. 代码开发必须在go path src目录下,不然,就有问题。
  2. 依赖手动管理
  3. 依赖包没有版本可言

应对包管理: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多个版本并存,且多个项目可以共享缓存的 module
  • GO111MODULE=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

否则就会报错找不到包

参考:

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发