參考網站
參考網站
參考網站
參考網站
參考網站
自從 Windows 升級到 Windows 10 Version 2004 之後,因為可以採用效能大幅提昇的 WSL 2 執行環境,像是 .NET Core、Golang 與 Docker 都會全部跑在 WSL 2 的 Linux 下。今天這篇文章,我將介紹如何在 Windows 平台打造完美的 Golang 開發環境,不但可以讓你享受 Linux 平台執行時無比的順暢,更能享受 Windows 平台絕佳的 VSCode 開發體驗。
使用 WSL 在 Windows 上安裝 Linux
開發人員可以在 Windows 計算機上同時訪問 Windows 和 Linux 的強大功能。通過適用於 Linux 的 Windows 子系統(WSL),開發人員可以安裝 Linux 發行版(例如Ubuntu、OpenSUSE、Kali、Debian、Arch Linux 等),並直接在 Windows 上使用 Linux 應用程序、實用程序和 Bash 命令行工具,不用進行任何修改,也無需承擔傳統虛擬機或雙啟動設置的費用。
安裝 WSL 命令
現在,可以使用單個命令安裝運行 WSL 所需的一切內容。在管理員模式下打開 PowerShell 或 Windows 命令提示符,方法是右鍵單擊並選擇"以管理員身份運行",輸入 wsl --install
命令,然後重啟電腦。
如果你運行的是舊版,或只是不想使用 install 命令並希望獲得分步指引,請參閱舊版 WSL 手動安裝步驟。
WSL 安裝 Ubuntu
WSL 安裝指令:
1
| wsl --install -d <DistroName>
|
在終端機使用以下指令安裝 Linux Ubuntu:
1
| wsl --install -d Ubuntu
|
設置 Linux 用戶名稱與密碼
使用 WSL 安裝 Linux 發行版的過程完成後,系統將要求你為 Linux 發行版創建"用戶名"和"密碼"。
- 此用戶名和密碼特定於安裝的每個單獨的 Linux 分發版,與 Windows 用戶名無關。
- 請注意,輸入密碼時,屏幕上不會顯示任何內容。這稱為盲目鍵入。不會看到正在鍵入的內容,這完全正常。
- 創建用戶名和密碼後,該帳戶將是分發版的默認用戶,並將在啟動時自動登錄。
- 此帳戶將被視為 Linux 管理員,能夠運行sudo(Super User Do) 管理命令。
- 在 WSL 上運行的每個 Linux 發行版都有其自己的 Linux 用戶帳戶和密碼。每當添加分發版、重新安裝或重置時,都必須配置一個 Linux 用戶帳戶。
BONUS:設置 root 密碼
在 WSL 的 Ubuntu,輸入以下指令設定 root 密碼:
測試 root 密碼:
1
2
3
4
5
6
7
8
| su -
# 輸入剛剛設定的 root 密碼
# 完成登入
# 退出 root
exit
|
安裝 Go 版本管理器 (Go Version Manager)
Go Version Manager 簡稱 gvm
,專門用來管理 Go 的執行環境,可以讓你任意切換 Go 的 Runtime 版本,又不會搞亂你的作業系統,這可說是兩全其美!
以下兩行命令,就可以輕鬆裝好 gvm 工具:
1
2
| bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
source ~/.gvm/scripts/gvm
|
安裝 Go 執行環境的門檻已經變的超低,尤其是安裝在 Linux / macOS 底下更是如此,官方已經移除了對各家 Linux Distro 的安裝套件支援,一份 tarball 解壓縮,環境變數 PATH
設定好就可以立刻開始使用,沒那麼多奇奇怪怪的套件管理器混淆 Linux 初學者的地方。
我認為安裝 gvm 對於打造 Go 開發環境來說,還是有好處的。至少安裝完成後的 Go 執行環境非常乾淨,各種複雜的 GO____
環境變數,全部交由 gvm 來管理。不想要 Go 或 gvm 的時候,只要以下兩行就可以清除乾淨:
1
2
| chmod u+w -R ~/.gvm/
gvm implode
|
安裝 Go 執行環境
先安裝 gvm 所需的必要套件
因為 gvm 可能會用到建置下個版本的 Go 執行環境,所以建議你安裝一些建置工具。
如果你採用 Ubuntu/Debian 系統,請安裝以下套件:
1
| sudo apt-get install binutils bison gcc make build-essential -y
|
- 如果有遇到不能執行上述安裝的情況,請用以下命令修復,修復後再重新安裝一次即可!
1
2
| sudo sed -i -r -e 's/^(set -e)$/#\1/' /var/lib/dpkg/info/libc6\:amd64.postinst
sudo apt --fix-broken install -y
|
- 如果跳出 Colud not find bison、binutils、gcc、make,手動一一安裝吧!
1
2
3
4
| sudo apt-get install bison
sudo apt-get install binutils
sudo apt-get install gcc
sudo apt-get install make
|
- 如果有遇到安裝 gcc 時報 404 Not Found 的錯誤,請先升級你的 apt 後再進行安裝:
錯誤訊息:
1
2
3
4
5
| E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/b/binutils/libctf0_2.34-6ubuntu1.1_amd64.deb 404 Not Found [IP: 91.189.88.152 80]
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/b/binutils/binutils-x86-64-linux-gnu_2.34-6ubuntu1.1_amd64.deb 404 Not Found [IP: 91.189.88.152 80]
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/b/binutils/binutils_2.34-6ubuntu1.1_amd64.deb 404 Not Found [IP: 91.189.88.152 80]
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/l/linux/linux-libc-dev_5.4.0-81.91_amd64.deb 404 Not Found [IP: 91.189.88.152 80]
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
|
升級 apt 並重新安裝 gcc:
1
2
3
| sudo apt update
sudo apt upgrade
sudo apt install gcc -y
|
如果你採用 RedHat/CentOS 系統,請安裝以下套件:
1
2
3
4
5
6
| sudo yum install curl
sudo yum install git
sudo yum install make
sudo yum install bison
sudo yum install gcc
sudo yum install glibc-devel
|
安裝完成後查詢 gvm 的版本資訊:
1
2
| wayne@Wayne-Desktop:~$ gvm version
Go Version Manager v1.0.22 installed at /home/wayne/.gvm
|
列出目前 gvm 已安裝的所有 Go 版本
撰文當下的回應內容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
| gvm gos (available)
go1
go1.0.1
go1.0.2
go1.0.3
go1.1
go1.1rc2
go1.1rc3
go1.1.1
go1.1.2
go1.2
go1.2rc2
go1.2rc3
go1.2rc4
go1.2rc5
go1.2.1
go1.2.2
go1.3
go1.3beta1
go1.3beta2
go1.3rc1
go1.3rc2
go1.3.1
go1.3.2
go1.3.3
go1.4
go1.4beta1
go1.4rc1
go1.4rc2
go1.4.1
go1.4.2
go1.4.3
go1.5
go1.5beta1
go1.5beta2
go1.5beta3
go1.5rc1
go1.5.1
go1.5.2
go1.5.3
go1.5.4
go1.6
go1.6beta1
go1.6beta2
go1.6rc1
go1.6rc2
go1.6.1
go1.6.2
go1.6.3
go1.6.4
go1.7
go1.7beta1
go1.7beta2
go1.7rc1
go1.7rc2
go1.7rc3
go1.7rc4
go1.7rc5
go1.7rc6
go1.7.1
go1.7.2
go1.7.3
go1.7.4
go1.7.5
go1.7.6
go1.8
go1.8beta1
go1.8beta2
go1.8rc1
go1.8rc2
go1.8rc3
go1.8.1
go1.8.2
go1.8.3
go1.8.4
go1.8.5
go1.8.5rc4
go1.8.5rc5
go1.8.6
go1.8.7
go1.9
go1.9beta1
go1.9beta2
go1.9rc1
go1.9rc2
go1.9.1
go1.9.2
go1.9.3
go1.9.4
go1.9.5
go1.9.6
go1.9.7
go1.10
go1.10beta1
go1.10beta2
go1.10rc1
go1.10rc2
go1.10.1
go1.10.2
go1.10.3
go1.10.4
go1.10.5
go1.10.6
go1.10.7
go1.10.8
go1.11
go1.11beta1
go1.11beta2
go1.11beta3
go1.11rc1
go1.11rc2
go1.11.1
go1.11.2
go1.11.3
go1.11.4
go1.11.5
go1.11.6
go1.11.7
go1.11.8
go1.11.9
go1.11.10
go1.11.11
go1.11.12
go1.11.13
go1.12
go1.12beta1
go1.12beta2
go1.12rc1
go1.12.1
go1.12.2
go1.12.3
go1.12.4
go1.12.5
go1.12.6
go1.12.7
go1.12.8
go1.12.9
go1.12.10
go1.12.11
go1.12.12
go1.12.13
go1.12.14
go1.12.15
go1.12.16
go1.12.17
go1.13
go1.13beta1
go1.13rc1
go1.13rc2
go1.13.1
go1.13.2
go1.13.3
go1.13.4
go1.13.5
go1.13.6
go1.13.7
go1.13.8
go1.13.9
go1.13.10
go1.13.11
go1.13.12
go1.13.13
go1.13.14
go1.13.15
go1.14
go1.14beta1
go1.14rc1
go1.14.1
go1.14.2
go1.14.3
go1.14.4
go1.14.5
go1.14.6
go1.14.7
go1.14.8
go1.14.9
go1.14.10
go1.14.11
go1.14.12
go1.14.13
go1.14.14
go1.14.15
go1.15
go1.15beta1
go1.15rc1
go1.15rc2
go1.15.1
go1.15.2
go1.15.3
go1.15.4
go1.15.5
go1.15.6
go1.15.7
go1.15.8
go1.15.9
go1.15.10
go1.15.11
go1.15.12
go1.15.13
go1.15.14
go1.15.15
go1.16
go1.16beta1
go1.16rc1
go1.16.1
go1.16.2
go1.16.3
go1.16.4
go1.16.5
go1.16.6
go1.16.7
go1.16.8
go1.16.9
go1.16.10
go1.16.11
go1.16.12
go1.16.13
go1.16.14
go1.16.15
go1.17
go1.17beta1
go1.17rc1
go1.17rc2
go1.17.1
go1.17.2
go1.17.3
go1.17.4
go1.17.5
go1.17.6
go1.17.7
go1.17.8
go1.17.9
go1.17.10
go1.17.11
go1.17.12
go1.17.13
go1.18
go1.18beta1
go1.18beta2
go1.18rc1
go1.18.1
go1.18.2
go1.18.3
go1.18.4
go1.18.5
go1.18.6
go1.18.7
go1.18.8
go1.18.9
go1.18.10
go1.19
go1.19beta1
go1.19rc1
go1.19rc2
go1.19.1
go1.19.2
go1.19.3
go1.19.4
go1.19.5
go1.20
go1.20rc1
go1.20rc2
go1.20rc3
release.r56
release.r57
release.r58
release.r59
release.r60
release.r57.1
release.r57.2
release.r58.1
release.r58.2
release.r60.1
release.r60.2
release.r60.3
|
安裝 go1.20 版本
1
| gvm install go1.20 --binary
|
列出目前 gvm 已安裝的所有 Go 版本
設定目前要用的 Go 版本(並設定為預設版本)
1
| gvm use go1.20 --default
|
確認目前執行的 Go 版本
BONUS(一):管理 Gopath 環境
gvm 提供了一个比較簡單的工具 gvm pkgset
可以創建使用 GOPATH
環境:
1
2
3
4
5
6
7
8
9
10
11
12
13
| gvm pkgset
# * http://github.com/moovweb/gvm
# == Description
# GVM pkgset is used to manage various Go packages
# == Usage
# gvm pkgset Command
# == Command
# create - create a new package set
# delete - delete a package set
# use - select where gb and goinstall target and link
# empty - remove all code and compiled binaries from package set
# list - list installed go packages
|
BONUS(二):卸載指定 Go 版本
安裝 VSCode 需要的 go modules 與相關工具
1
| sudo apt install xdg-utils -y
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| go get github.com/sqs/goreturns
go get github.com/mdempsky/gocode
go get github.com/uudashr/gopkgs/v2/cmd/gopkgs
go get github.com/ramya-rao-a/go-outline
go get github.com/acroca/go-symbols
go get golang.org/x/tools/cmd/guru
go get golang.org/x/tools/cmd/gorename
go get github.com/cweill/gotests/...
go get github.com/fatih/gomodifytags
go get github.com/josharian/impl
go get github.com/davidrjenni/reftools/cmd/fillstruct
go get github.com/haya14busa/goplay/cmd/goplay
go get github.com/godoctor/godoctor
go get github.com/go-delve/delve/cmd/dlv
go get github.com/stamblerre/gocode
go get github.com/rogpeppe/godef
go get golang.org/x/tools/cmd/goimports
go get golang.org/x/lint/golint
go get golang.org/x/tools/gopls
|
預設會自動安裝並載入 Visual Studio Code Remote - WSL 擴充套件。
測試是否安裝成功
- 抓取 Go 套件原始碼回來測試用 VSCode 開啟專案
1
2
3
4
| git clone https://github.com/appleboy/gorush.git
cd gorush
make
code .
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
| {
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "build",
"command": "go",
"type": "shell",
"args": [
"build",
"-o",
"dist/${workspaceFolderBasename}"
],
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"reveal": "silent"
},
"problemMatcher": "$msCompile"
},
{
"label": "test",
"command": "go",
"type": "shell",
"args": [
"test",
],
"group": {
"kind": "test",
"isDefault": true
},
"presentation": {
"reveal": "silent"
},
"problemMatcher": "$msCompile"
}
]
}
|
- 調整 Visual Studio Code 使用者設定
1
2
3
4
5
6
7
8
9
10
| {
"go.useLanguageServer": true,
"editor.snippetSuggestions": "top",
"terminal.integrated.shellArgs.linux": ["-l"],
"code-runner.saveAllFilesBeforeRun": true,
"code-runner.ignoreSelection": true,
"code-runner.runInTerminal": true
}
|