Skip to content

Commit 3a68d52

Browse files
author
铭REN
authored
版本管理
1 parent 02a504e commit 3a68d52

File tree

1 file changed

+112
-0
lines changed

1 file changed

+112
-0
lines changed

版本升级及多版本管理.md

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
# 前言
2+
3+
关注 Go Blog 的同学可能都会注意到,官方每次在发布新版本时都会提供类似下面的版本升级策略:
4+
5+
![go-upgrade-1655691183Ka99Uw](http://blog-media.knowledge.ituknown.cn/Golang-Upgrade/go-upgrade-1655691183Ka99Uw.png)
6+
7+
这是 Go 官网提供的一种多版本管理方式,也是升级 Go 的主要方式。
8+
9+
至于为什么需要安装多个版本的 Go,除了工作需要外,更多的可能是为了尝鲜。
10+
11+
现在就来看下如何升级 Go 版本:
12+
13+
# 如何实现版本升级
14+
15+
按照官网的方式,安装某个版本的 Go 跟安装普通依赖包如出一辙:
16+
17+
```bash
18+
$ go install golang.org/dl/<go-version>
19+
```
20+
21+
这个命令并不会真正的执行安装操作,只是将对应的 Go 版本的包装器下载到 `$GOPATH/bin` 目录下(可以理解为创建一个标记),想要真正的执行安装还需要执行下下面的命令才行:
22+
23+
```bash
24+
$ <go-version> download
25+
```
26+
27+
|**Note**|
28+
|:-------|
29+
|直接使用 `<go-version> download` 执行安装的前提是配置了环境变量(`export PATH=$PATH:$GOPATH/bin`),如果你没有配置环境变量需要使用 `$GOPATH/bin/<go-version> download` 代替!|
30+
31+
这个命令会将你指定的版本(`<go-version>`)下载到当前用户下的 sdk 目录中(可以理解为新的 `GOROOT`,只是没有添加到环境变量中)。另外,需要特别强调的是,这个 sdk 是默认的安装目录,没法修改。
32+
33+
--
34+
35+
这里要额外的说下,Go 多版本安装使用的是 go-dl 工具,对应的仓库地址是:[https://github.com/golang/dl](https://github.com/golang/dl)
36+
37+
在这个仓库里你会看到很多以各个版本命名的目录(截图如下),也就是说每次发布新版本时就会在这个仓库里创建一个对应的版本目录,所以如果你不知道 go 有哪些版本可以通过这个仓库的目录查看。
38+
39+
![golang-dl-1655646062UWSaKv](http://blog-media.knowledge.ituknown.cn/Golang-Upgrade/golang-dl-1655646062UWSaKv.png)
40+
41+
# 版本升级
42+
43+
现在来看下版本升级示例,下面是我当前系统上的 Go 版本以及主要环境变量:
44+
45+
```bash
46+
$ go version
47+
go version go1.15.15 linux/amd64
48+
49+
$ go env
50+
GOARCH="amd64"
51+
GOOS="linux"
52+
GOROOT="/usr/lib/golang/go"
53+
GOPATH="/usr/lib/golang/gopath"
54+
GOPROXY="https://proxy.golang.com.cn,direct"
55+
...
56+
```
57+
58+
现在我想要安装当前 go 的最新版本 `go1.18.3`,只需要执行下面的命令:
59+
60+
```bash
61+
$ go install golang.org/dl/go1.18.3
62+
63+
#
64+
65+
$ go install golang.org/dl/go1.18.3@latest
66+
```
67+
68+
这个命令执行完成后会将该版本的下载包装器下载到 `$GOPATH/bin` 目录下,文件名就是指定的 go 版本号 `go1.18.3`
69+
70+
```bash
71+
$ ls $GOPATH/bin | grep 18
72+
go1.18.3
73+
```
74+
75+
现在开始执行安装命令:
76+
77+
```bash
78+
$ go1.18.3 download
79+
```
80+
81+
然后就会显示下载进度条,当下载完成后就会看到有个解压操作。会将下载的这个 Go 版本安装到当前用户下的 sdk 目录:
82+
83+
```
84+
.....
85+
Downloaded 92.8% (131513376 / 141748419 bytes) ...
86+
Downloaded 94.1% (133315632 / 141748419 bytes) ...
87+
Downloaded 95.7% (135691296 / 141748419 bytes) ...
88+
Downloaded 97.2% (137821232 / 141748419 bytes) ...
89+
Downloaded 98.5% (139623520 / 141748419 bytes) ...
90+
Downloaded 100.0% (141748419 / 141748419 bytes)
91+
Unpacking /home/ituknown/sdk/go1.18.3/go1.18.3.linux-amd64.tar.gz ... # 看这里
92+
Success. You may now run 'go1.18.3'
93+
```
94+
95+
之后就会看到 home 目录下多了个 sdk 目录,我们安装的这个版本的 Go 也在这个目录下:
96+
97+
```bash
98+
$ ls ~/sdk/
99+
go1.18.3
100+
```
101+
102+
当然了,如果你现在想要再安装一个 `go1.10.7` 版本,按照上面的操作示例,最终这个 `go1.10.7` 也是会被安装到这个 sdk 目录。
103+
104+
之后就可以正常使用了,只需要在项目里配置下 `GOROOT` 变量即可,其他的照旧~
105+
106+
--
107+
108+
https://go.dev/dl
109+
110+
https://go.dev/doc/manage-install
111+
112+
https://medium.com/@sherlock297/go-install-version-is-required-when-current-directory-is-not-in-a-module-4ae2d1e0aa86

0 commit comments

Comments
 (0)