参考文章:Golang V1.19.1 安装配置 (windows)
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 的安装路径,然后点击 Next。
GOROOT
然后点击 Install,等待安装完成。
最后点击 Finish。
2.GOROOTGOROOT 就是 Go 语言的安装目录,在绝大多数情况下都不需要修改 GOROOT。
D:\software\golang
Go 的文件目录结构如下:
在安装 Go1.20.3 的时候,默认会自动把 GOROOT 下的 bin 目录添加到系统环境变量 PATH 中。
D:\software\golang\bin
go version
go env
3.Go 的包管理
参考文章:
- 一文搞懂 Go Modules 前世今生及入门使用
- 简单聊聊 GOPATH 与 Go Modules
- go包管理速通,一篇文章就够了,再也不用担心因为不会导包被辞退
- 10分钟带你了解Go依赖管理常见模式(一)
3.1 GOPATH 模式
GOPATH/srcGOPATH/srcGOPATH/binGOPATH/pkg
GOPATH/src
GOPATH 模式已经不推荐使用了,任何 Gopher 应该从此刻就投入 Go Modules 的怀抱。
3.2 Go Modules 模式
Go Modules 发布于 Go1.11,成长于 Go1.12,丰富于 Go1.13,正式于 Go1.14 推荐在生产上使用。
GOPATH/pkg/modGOPATH/binGOPATH/src
在有了 Go Modules 之后,GOPATH 和 Go Modules 就分别负责不同的职责,共同为 Golang 项目服务:
GOPATH/pkg/mod
GOPATH/src
4.GOPATH
至此,
GOPATH\pkg\mod
其实,在安装 Go1.20.3 时已经自动配置好 GOPATH 了,但是默认情况下 GOPATH 在 C 盘,所以,之后下载的外部依赖包也就存放在 C 盘。如果怕之后安装的依赖包太多占用 C 盘空间的话,我们可以更改 GOPATH 到其他位置。
%USERPROFILE%\go
%USERPROFILE%\go\bin
5.GO111MODULE
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
6.GOPROXY
GOPROXY 主要用于设置 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.参考资料
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环境变量详解(二)