go 环境配置

环境问题

1.go test: can’t load package: package … is not in GOROOT

GO111MODULE配置不当导致的问题。

首先我们了解下GO111MODULE产生的背景

首先,让我们谈谈 GOPATH。当 Go 在 2009 年首次推出时,它并没有随包管理器一起提供。取而代之的是 go get,通过使用它们的导入路径来获取所有源并将其存储在 $ GOPATH / src 中。没有版本控制并且『master』分支表示该软件包的稳定版本。

Go 1.11 引入了 Go 模块 (以前称为 vgo- 版本为 Go)。 Go Modules 不使用 GOPATH 存储每个软件包的单个 git checkout,而是存储带有 go.mod 标记版本的标记版本,并跟踪每个软件包的版本。

GO111MODULE是一个环境变量,通过它来控制『GOPATH 行为』与『Go Modules 行为』

  • GO111MODULE = on,强制使用Go模块,需要go.mod正常工作(即使处于GOPATH下)。
  • GO111MODULE = off,强制使用GOPATH,从$GOPATH/src下获取所有源
  • 在 Go 1.13 下, GO111MODULE 的默认行为 (auto) 改变了:
    • 当存在 go.mod 文件时或处于 GOPATH 外, 其行为均会等同于于 GO111MODULE=on。这意味着在 Go 1.13 下你可以将所有的代码仓库均存储在 GOPATH 下。
    • 当处于 GOPATH 内且没有 go.mod 文件存在时其行为会等同于 GO111MODULE=off