Windows 安装 Go1.20.3、go env 环境变量详解

文章目录

  • 1.下载
  • 2.安装
  • 3.GOROOT
  • 4.GOPATH
  • 5.GO111MODULE
    • 5.1 GOPATH 模式
    • 5.2 Go Modules 模式
  • 6.GOPROXY
  • 7.GOSUMDB
  • 8.GONOPROXY/GONOSUMDB/GOPRIVATE
  • 9.GOMODCACHE
  • 10.GOCACHE
  • 11.GOENV
  • 12.GOBIN
  • 13.参考资料

1.下载

Go 官网下载地址:https://golang.google.cn/dl/

Windows 安装 Go1.20.3、go env 环境变量详解_第1张图片

2.安装

下载完成后会得到 go1.20.3.windows-amd64.msi 这个文件,直接双击运行,进入如下界面,点击 Next。

Windows 安装 Go1.20.3、go env 环境变量详解_第2张图片

默认勾选了 “I accept the terms in the License Agreement”,点击 Next。

Windows 安装 Go1.20.3、go env 环境变量详解_第3张图片

Go 默认安装在 C 盘,更改 Go 的安装路径(这里设置的安装路径就是后续 GOROOT 的值),然后点击 Next。

Windows 安装 Go1.20.3、go env 环境变量详解_第4张图片

Windows 安装 Go1.20.3、go env 环境变量详解_第5张图片

然后点击 Install,等待安装完成。

Windows 安装 Go1.20.3、go env 环境变量详解_第6张图片

Windows 安装 Go1.20.3、go env 环境变量详解_第7张图片

最后点击 Finish。

Windows 安装 Go1.20.3、go env 环境变量详解_第8张图片

3.GOROOT

GOROOT 就是 Go 语言的安装目录,在绝大多数情况下都不需要修改 GOROOT。

以我的电脑为例,GOROOT 的值为 D:\software\golang

Go 的文件目录结构如下:

Windows 安装 Go1.20.3、go env 环境变量详解_第9张图片

在安装 Go1.20.3 的时候,默认会自动把 GOROOT 下的 bin 目录添加到系统环境变量 PATH 中。

以我的电脑为例,已经自动把 D:\software\golang\bin 添加到系统环境变量 PATH 中了。

Windows 安装 Go1.20.3、go env 环境变量详解_第10张图片

因此,win + R 输入 cmd 打开命令行,在任意位置下输入 go version 都能执行成功。

Windows 安装 Go1.20.3、go env 环境变量详解_第11张图片

在命令行中输入 go env 命令来查看所有 Go 环境变量的当前值:

Windows 安装 Go1.20.3、go env 环境变量详解_第12张图片

4.GOPATH

GOPATH 就是之后项目下载依赖包的存放路径。Go 语言目前都是使用 Go Modules 管理依赖,在使用 Go Modules 时,Go 会把下载的依赖包存储在 GOPATH\pkg\mod 中。

其实,在安装 Go1.20.3 时已经自动配置好 GOPATH 了,但是默认情况下 GOPATH 在 C 盘,所以,之后下载的外部依赖包也就存放在 C 盘。如果怕之后安装的依赖包太多占用 C 盘空间的话,我们可以更改 GOPATH 到其他位置。

Windows 安装 Go1.20.3、go env 环境变量详解_第13张图片

将 GOPATH 变量的值 %USERPROFILE%\go 修改为自己想要的目录。

Windows 安装 Go1.20.3、go env 环境变量详解_第14张图片

然后再把用户环境变量 PATH 中的值 %USERPROFILE%\go\bin 修改为 GOPATH 下的 bin 目录。

Windows 安装 Go1.20.3、go env 环境变量详解_第15张图片

Windows 安装 Go1.20.3、go env 环境变量详解_第16张图片

5.GO111MODULE

5.1 GOPATH 模式

在 Go1.11 版本之前,使用的是 GOPATH 开发模式。

在使用 GOPATH 的模式下,我们需要将项目文件和下载的包放到 GOPATH\src 目录下进行管理。

GOPATH 模式的缺点:

  • 项目代码不能想放哪里就放哪里,哪怕你的学习资料盘满了也不行。
  • go get 命令的时候,无法指定获取的版本
  • 引用第三方项目的时候,无法处理 v1、v2、v3 等不同版本的引用问题,因为在 GOPATH 模式下项目路径都是 github.com/foo/project
  • 无法同步一致第三方版本号,在运行 Go 应用程序的时候,无法保证其它人与所期望依赖的第三方库是相同的版本

5.2 Go Modules 模式

Go Modules 是 Go 语言的依赖解决方案,发布于 Go1.11,成长于 Go1.12,丰富于 Go1.13,正式于 Go1.14 推荐在生产上使用。

GO111MODULE 是 Go Modules 功能的开关,GO111MODULE 有三个值:

  • GO111MODULE=off,go 命令行将不会支持 modules 功能,寻找依赖包的方式将会沿用旧版本的通过 vendor 目录或者 GOPATH 模式来查找。
  • GO111MODULE=on,go 命令行会使用 modules 功能,而一点也不会去 GOPATH 目录下查找。
  • GO111MODULE=auto,go 命令行将会根据当前目录来决定是否启用 modules 功能。下面两种情形将启用 modules 功能:
    • 当前目录在 GOPATH\src 之外且该目录包含 go.mod 文件。
    • 当前文件在包含 go.mod 文件的目录下面。

开启 Go Modules 功能的命令如下:

go env -w GO111MODULE=on

在有了 Go Modules 之后,GOPATH 和 Go Modules 就分别负责不同的职责,共同为 Golang 项目服务:

  • GOPATH 用来存放我们从网上拉取的第三方依赖包。
  • Go Modules 用来存放我们自己的 Golang 项目文件,当自己的项目需要依赖第三方的包的时候,我们通过 Go Modules 目录下的一个 go.mod 文件来引用 GOPATH\pkg\mod 文件夹下的第三方依赖即可。

这样一来,既解决了原来只能局限在 GOPATH\src 下进行编程的问题,也解决了第三方依赖包难以管理和重复依赖占用磁盘空间的问题。

总而言之,在引入 Go Modules 之后,我们不会直接在 GOPATH 目录进行编程,而是把 GOPATH 作为一个第三方依赖包的仓库,我们真正的工作空间在 Go Modules 目录下。

6.GOPROXY

GOPROXY 主要用于设置 Go 模块代理,其作用是使 Go 在后续拉取模块版本时直接通过镜像站点来快速拉取。

GOPROXY 的值是一个以英文逗号 , 分割的 Go 模块代理列表,允许设置多个模块代理。假设你不想使用,也可以将其设置为 off,这将会禁止 Go 在后续操作中使用任何 Go 模块代理。

GOPROXY 的默认值是 https://proxy.golang.org,direct,在国内无法访问。

因此,这里推荐使用七牛云的代理:https://goproxy.cn/

设置七牛云代理的命令如下:

go env -w GOPROXY=https://goproxy.cn,direct

在上面设置的值中,我们可以发现值列表中有 “direct” 标识,它又有什么作用呢?

实际上 “direct” 是一个特殊指示符,用于指示 Go 回源到模块版本的源地址去抓取(比如 GitHub 等),场景如下:当值列表中上一个 Go 模块代理返回 404 或 410 错误时,Go 自动尝试列表中的下一个,遇见 “direct” 时回源,也就是回到源地址去抓取,而遇见 EOF 时终止并抛出类似 “invalid version: unknown revision…” 的错误。

7.GOSUMDB

GOSUMDB 的值是一个 Go checksum database,用于在拉取模块版本时(无论是从源站拉取还是通过 Go module proxy 拉取)保证拉取到的模块版本数据未经过篡改,若发现不一致,也就是可能存在篡改,将会立即中止。

GOSUMDB 的默认值为 sum.golang.org,在国内无法访问,但是 GOSUMDB 可以被 Go 模块代理所代理。因此,我们可以通过设置 GOPROXY 来解决,而先前我们所设置的模块代理 https://goproxy.cn 就能支持代理 sum.golang.org,所以这一个问题在设置 GOPROXY 后,你可以不需要过度关心。

也可以将 GOSUMDB 设置为 off,也就是禁止 Go 在后续操作中校验模块版本。

8.GONOPROXY/GONOSUMDB/GOPRIVATE

这三个环境变量都是用在当前项目依赖了私有模块,例如像是你公司的私有 Git 仓库,又或是 Github 中的私有库,都是属于私有模块,都是要进行设置的,否则会拉取失败。

更细致来讲,就是依赖了由 GOPROXY 指定的 Go 模块代理或由 GOSUMDB 指定 Go checksum database 都无法访问到的模块时的场景。

而一般建议直接设置 GOPRIVATE,它的值将作为 GONOPROXY 和 GONOSUMDB 的默认值,所以建议的最佳姿势是直接使用 GOPRIVATE。

并且它们的值都是一个以英文逗号 , 分割的模块路径前缀,也就是可以设置多个,例如:

go env -w GOPRIVATE="git.example.com,github.com/eddycjy/mquote"

设置后,前缀为 git.example.com 和 github.com/eddycjy/mquote 的模块都会被认为是私有模块。

如果不想每次都重新设置,我们也可以利用通配符,例如:

go env -w GOPRIVATE="*.example.com"

这样设置的话,所有模块路径为 example.com 的子域名(例如:git.example.com)都将不经过 Go module proxy 和 Go checksum database,需要注意的是不包括 example.com 本身。

9.GOMODCACHE

GOMODCACHE 就是存储 Go 下载的外部依赖模块文件的目录,默认值为 GOPATH\pkg\mod

以我的电脑为例,GOMODCACHE 的值为 D:\software\gopath\pkg\mod

因此,我们只需要更改 GOPATH 的值即可,GOMODCACHE 的值会自动做出相应的变动。

10.GOCACHE

GOCACHE 目录用来存放 Go 项目在构建过程中产生的缓存,默认值为 C:\Users\%UserName%\AppData\Local\go-build

以我的电脑为例,GOCACHE 的值为 C:\Users\Cai\AppData\Local\go-build

11.GOENV

GOENV 目录用来存放 Go 环境变量的值的配置文件,默认值为 C:\Users\%UserName%\AppData\Roaming\go\env,此值一般不需要更改,并且也不能通过 go env 的方式来更改此变量值。

以我的电脑为例,GOENV 的值为 C:\Users\Cai\AppData\Roaming\go\env

我们可以来到此目录下,发现有一个 env 文件,打开就可以看到:文件的内容就是我们之前自定义过的 Go 环境变量的值。

Windows 安装 Go1.20.3、go env 环境变量详解_第17张图片

12.GOBIN

GOBIN 目录用来存放程序生成的可执行文件。可以设置它,也可以不设置,默认为空,保持默认即可。

在使用 Go Modules 时,Go 会把 go install 的可执行文件结果放在 GOPATH\bin 中。在前面的步骤中,我们已经把 GOPATH\bin 这个目录添加到用户环境变量 PATH 中了,这样在全局任何地方都能找到这个目录。

13.参考资料

Golang V1.19.1 安装配置 (windows)

Go env环境变量配置

GO111MODULE的设置与查看

Go — build、run 和 install 命令

亲测GO环境搭建,理解go build、go install、go get

go run、build、install、get的原理和区别

go mod使用

简单聊聊 GOPATH 与 Go Modules

GoModules模式基础环境说明

Go 语言中 GoPath 模式与 GoModules 模式介绍

go env环境变量详解(一)

go env环境变量详解(二)

你可能感兴趣的:(Go,windows,golang)