Go 官网下载地址:https://golang.google.cn/dl/
2.安装下载完成后会得到 go1.20.3.windows-amd64.msi 这个文件,直接双击运行,进入如下界面,点击 Next。
默认勾选了 “I accept the terms in the License Agreement”,点击 Next。
Go 默认安装在 C 盘,更改 Go 的安装路径(这里设置的安装路径就是后续 GOROOT 的值),然后点击 Next。
然后点击 Install,等待安装完成。
最后点击 Finish。
3.GOROOTGOROOT 就是 Go 语言的安装目录,在绝大多数情况下都不需要修改 GOROOT。
D:\software\golang
Go 的文件目录结构如下:
在安装 Go1.20.3 的时候,默认会自动把 GOROOT 下的 bin 目录添加到系统环境变量 PATH 中。
D:\software\golang\bin
go version
go env
4.GOPATH
GOPATH\pkg\mod
其实,在安装 Go1.20.3 时已经自动配置好 GOPATH 了,但是默认情况下 GOPATH 在 C 盘,所以,之后下载的外部依赖包也就存放在 C 盘。如果怕之后安装的依赖包太多占用 C 盘空间的话,我们可以更改 GOPATH 到其他位置。
%USERPROFILE%\go
%USERPROFILE%\go\bin
5.GO111MODULE
5.1 GOPATH 模式
在 Go1.11 版本之前,使用的是 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\pkg\mod
这样一来,既解决了原来只能局限在 GOPATH\src 下进行编程的问题,也解决了第三方依赖包难以管理和重复依赖占用磁盘空间的问题。
总而言之,在引入 Go Modules 之后,我们不会直接在 GOPATH 目录进行编程,而是把 GOPATH 作为一个第三方依赖包的仓库,我们真正的工作空间在 Go Modules 目录下。
6.GOPROXYGOPROXY 主要用于设置 Go 模块代理,其作用是使 Go 在后续拉取模块版本时直接通过镜像站点来快速拉取。
,off
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.GOSUMDBGOSUMDB 的值是一个 Go checksum database,用于在拉取模块版本时(无论是从源站拉取还是通过 Go module proxy 拉取)保证拉取到的模块版本数据未经过篡改,若发现不一致,也就是可能存在篡改,将会立即中止。
sum.golang.orghttps://goproxy.cnsum.golang.org
off
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.GOMODCACHEGOPATH\pkg\mod
D:\software\gopath\pkg\mod
因此,我们只需要更改 GOPATH 的值即可,GOMODCACHE 的值会自动做出相应的变动。
10.GOCACHEC:\Users\%UserName%\AppData\Local\go-build
C:\Users\Cai\AppData\Local\go-build
11.GOENV
C:\Users\%UserName%\AppData\Roaming\go\env
C:\Users\Cai\AppData\Roaming\go\env
我们可以来到此目录下,发现有一个 env 文件,打开就可以看到:文件的内容就是我们之前自定义过的 Go 环境变量的值。
12.GOBINGOBIN 目录用来存放程序生成的可执行文件。可以设置它,也可以不设置,默认为空,保持默认即可。
GOPATH\binGOPATH\bin
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环境变量详解(二)