Go 官网下载地址:https://golang.google.cn/dl/
下载完成后会得到 go1.20.3.windows-amd64.msi 这个文件,直接双击运行,进入如下界面,点击 Next。
默认勾选了 “I accept the terms in the License Agreement”,点击 Next。
Go 默认安装在 C 盘,更改 Go 的安装路径(这里设置的安装路径就是后续 GOROOT 的值),然后点击 Next。
然后点击 Install,等待安装完成。
最后点击 Finish。
GOROOT 就是 Go 语言的安装目录,在绝大多数情况下都不需要修改 GOROOT。
以我的电脑为例,GOROOT 的值为 D:\software\golang
。
Go 的文件目录结构如下:
在安装 Go1.20.3 的时候,默认会自动把 GOROOT 下的 bin 目录添加到系统环境变量 PATH 中。
以我的电脑为例,已经自动把 D:\software\golang\bin
添加到系统环境变量 PATH 中了。
因此,win + R 输入 cmd 打开命令行,在任意位置下输入 go version
都能执行成功。
在命令行中输入 go env
命令来查看所有 Go 环境变量的当前值:
GOPATH 就是之后项目下载依赖包的存放路径。Go 语言目前都是使用 Go Modules 管理依赖,在使用 Go Modules 时,Go 会把下载的依赖包存储在 GOPATH\pkg\mod
中。
其实,在安装 Go1.20.3 时已经自动配置好 GOPATH 了,但是默认情况下 GOPATH 在 C 盘,所以,之后下载的外部依赖包也就存放在 C 盘。如果怕之后安装的依赖包太多占用 C 盘空间的话,我们可以更改 GOPATH 到其他位置。
将 GOPATH 变量的值 %USERPROFILE%\go
修改为自己想要的目录。
然后再把用户环境变量 PATH 中的值 %USERPROFILE%\go\bin
修改为 GOPATH 下的 bin 目录。
在 Go1.11 版本之前,使用的是 GOPATH 开发模式。
在使用 GOPATH 的模式下,我们需要将项目文件和下载的包放到 GOPATH\src
目录下进行管理。
GOPATH 模式的缺点:
Go Modules 是 Go 语言的依赖解决方案,发布于 Go1.11,成长于 Go1.12,丰富于 Go1.13,正式于 Go1.14 推荐在生产上使用。
GO111MODULE 是 Go Modules 功能的开关,GO111MODULE 有三个值:
开启 Go Modules 功能的命令如下:
go env -w GO111MODULE=on
在有了 Go Modules 之后,GOPATH 和 Go Modules 就分别负责不同的职责,共同为 Golang 项目服务:
GOPATH\pkg\mod
文件夹下的第三方依赖即可。这样一来,既解决了原来只能局限在 GOPATH\src 下进行编程的问题,也解决了第三方依赖包难以管理和重复依赖占用磁盘空间的问题。
总而言之,在引入 Go Modules 之后,我们不会直接在 GOPATH 目录进行编程,而是把 GOPATH 作为一个第三方依赖包的仓库,我们真正的工作空间在 Go Modules 目录下。
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…” 的错误。
GOSUMDB 的值是一个 Go checksum database,用于在拉取模块版本时(无论是从源站拉取还是通过 Go module proxy 拉取)保证拉取到的模块版本数据未经过篡改,若发现不一致,也就是可能存在篡改,将会立即中止。
GOSUMDB 的默认值为 sum.golang.org
,在国内无法访问,但是 GOSUMDB 可以被 Go 模块代理所代理。因此,我们可以通过设置 GOPROXY 来解决,而先前我们所设置的模块代理 https://goproxy.cn
就能支持代理 sum.golang.org
,所以这一个问题在设置 GOPROXY 后,你可以不需要过度关心。
也可以将 GOSUMDB 设置为 off
,也就是禁止 Go 在后续操作中校验模块版本。
这三个环境变量都是用在当前项目依赖了私有模块,例如像是你公司的私有 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 本身。
GOMODCACHE 就是存储 Go 下载的外部依赖模块文件的目录,默认值为 GOPATH\pkg\mod
。
以我的电脑为例,GOMODCACHE 的值为 D:\software\gopath\pkg\mod
。
因此,我们只需要更改 GOPATH 的值即可,GOMODCACHE 的值会自动做出相应的变动。
GOCACHE 目录用来存放 Go 项目在构建过程中产生的缓存,默认值为 C:\Users\%UserName%\AppData\Local\go-build
。
以我的电脑为例,GOCACHE 的值为 C:\Users\Cai\AppData\Local\go-build
。
GOENV 目录用来存放 Go 环境变量的值的配置文件,默认值为 C:\Users\%UserName%\AppData\Roaming\go\env
,此值一般不需要更改,并且也不能通过 go env 的方式来更改此变量值。
以我的电脑为例,GOENV 的值为 C:\Users\Cai\AppData\Roaming\go\env
。
我们可以来到此目录下,发现有一个 env 文件,打开就可以看到:文件的内容就是我们之前自定义过的 Go 环境变量的值。
GOBIN 目录用来存放程序生成的可执行文件。可以设置它,也可以不设置,默认为空,保持默认即可。
在使用 Go Modules 时,Go 会把 go install 的可执行文件结果放在 GOPATH\bin
中。在前面的步骤中,我们已经把 GOPATH\bin
这个目录添加到用户环境变量 PATH 中了,这样在全局任何地方都能找到这个目录。
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环境变量详解(二)