目录
  • 1 区分几个路径
  • 2 GO111MODULE
  • 3 解决方案
    • 方案一:关闭 go mod 模式
    • 方案二:使用go mod 模式
  • 总结

    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多个版本并存,且多个项目可以共享缓存的 module
    • GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:

    当前目录在GOPATH/src之外且该目录包含go.mod文件

    当前文件在包含go.mod文件的目录下面。

    参看文章:go mod使用

    3 解决方案

    命令行使用go env 查看环境,明显GO11MODULE没有设定

    Golang运行报错找不到包:package xxx is not in GOROOT的解决过程

    方案一:关闭 go mod 模式

    用 gopath 模式引入包从src目录下开始引入,需要

    go env -w GO111MODULE=off
    

    方案二:使用go mod 模式

    go env -w GO111MODULE=on
    

    并且在目录下执行 go mod init

    目录下产生两个文件

    go.mod
    go.sum
    

    否则就会报错找不到包

    参考:package ‘xxx’ is not in GOROOT

    总结

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。