问题描述
新方法:Go 模块
从 Go 1.11 开始,您不必再使用 GOPATH。只需转到您的项目目录并执行一次:
go mod init github.com/youruser/yourrepo
-
有了这个,Go 在该目录中创建了一个模块根。
-
您可以根据需要创建任意数量的模块。
-
有关分步说明,另请参阅此答案:
从 Go 1.11+ 开始,不再推荐使用 GOPATH,新的方式是使用 Go Modules。
### 假设您正在编写一个名为 的程序simple
:
-
创建目录:
sh mkdir simple cd simple
-
创建一个新模块:
sh go mod init github.com/username/simple # Here, the module name is: github.com/username/simple. # You're free to choose any module name. # It doesn't matter as long as it's unique. # It's better to be a URL: so it can be go-gettable.
-
将所有文件放在该目录中。
-
最后,运行:
sh go run .
-
或者,您可以通过构建它来创建一个可执行程序:
```sh go build .
# then: ./simple # if you’re on xnix
# or, just: simple # if you’re on Windows ```
有关更多信息,您可以阅读此。
从 1.11 开始,Go 已经包含了对版本模块的支持,正如这里提出的那样。最初的原型 vgo 于 2018 年 2 月发布。 2018 年 7 月,版本化模块登陆 Go 主存储库。在 Go 1.14 中,模块支持被认为可以用于生产,并鼓励所有用户从其他依赖管理系统迁移到模块。
旧方式:GOPATH
如果您坚持使用 GOPATH,请注意以下几点:
- 从 Go 1.8 开始,您不需要设置 GOPATH 或 GOROOT。
- 默认情况下,GOPATH 位于您的用户/主目录下。
从文档:
如果未设置 GOPATH,则在 Unix 系统上假定为 $HOME/go,在 Windows 上假定为 %USERPROFILE%\go。如果要使用自定义位置作为工作区,可以设置 GOPATH 环境变量。
只需添加以下几行~/.bashrc
,这将持续存在。但是,您可以使用您喜欢的其他路径作为 GOPATH,而不是$HOME/go
在我的示例中。
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
解决方法
我正在尝试做一个go get
:
go get github.com/go-sql-driver/mysql
它失败并出现以下错误:
package github.com/go-sql-driver/mysql: cannot download,$GOPATH not set. For more details see: go help gopath
当我执行 a 时go env
,Go 值列表如下所示:
ubuntu@ip-xxx-x-xx-x:~$ go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH=""
GORACE=""
GOROOT="/usr/lib/go"
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_amd64"
CC="gcc"
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread"
CGO_ENABLED="1"
显然 GOPATH 没有设置,我应该如何以及在哪里设置它?
我看到很多线程都提到了这个错误,但没有一个线程可以回答我的问题,需要编辑哪个文件才能为该路径提供值?