VSCode安裝GO語言依賴工具
由於vscode對go語言的支援還是hin不錯滴,所以我日常學習go都用vscode,但這貨有個毛病,各種lint、補全、nav、除錯都依賴go語言的其他擴充套件工具,如果安裝補全,會給出類似提示:
The "gocode" command is not available. Use "go get -v github.com/mdempsky/gocode" to install.
但如果按照vscode的提示點選“安裝”後,經過漫長等待,會迎來進一步提示:
gocode: Error: Command failed: /usr/local/go/bin/go get -u -v github.com/mdempsky/gocode github.com/mdempsky/gocode (download) Fetching https://golang.org/x/tools/go/gcexportdata?go-get=1 https fetch failed: Get https://golang.org/x/tools/go/gcexportdata?go-get=1: dial tcp 216.239.37.1:443: i/o timeout package golang.org/x/tools/go/gcexportdata: unrecognized import path "golang.org/x/tools/go/gcexportdata" (https fetch: Get https://golang.org/x/tools/go/gcexportdata?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
What's the fuuuuuuu!!!
必須說明我是在科學上網的前提下執行的安裝命令,所以猜測不是網路問題,具體原因沒深究,我參考了ofollow,noindex">官方指導 以及一篇博文 解決的該問題,部落格寫得有點繞,我挑簡單的總結一下。
解決方案
從官方文件中可以明確,VSCode依賴的幾款工具完成不同功能:
以上的工具可以有選擇地安裝,但為了開發過程中不要出什麼岔子,我一般選擇全部安裝,很不幸的是安裝過程中80%的工具會出現timeout
的提示。
安裝步驟
為了統一每個人的開發環境,下文中GOPATH
表示自己電腦go的安裝路徑,例如我的電腦預設安裝路徑為~/go
,如果沒有的話建議先執行命令export GOPATH=~/go
,Windows使用者...:wave:
-
建立目錄
$GOPATH/src/golang.org/x
,並切換到該目錄
mkdir -p $GOPATH/src/golang.org/x/ cd $GOPATH/src/golang.org/x/
-
克隆golang.org工具原始碼
如果不克隆的話,
go get -u -v golang.org/xxx
肯定是timeout的,所以只能先把它們下載到本地src/golang.org/x/tools
git clone https://github.com/golang/tools.git git clone https://github.com/golang/lint.git
-
下載github原始碼
按照
go get -u -v
命令,從GitHub/">GitHub上下載程式碼後還會fetch
,我們很可能會在fetch https://golang.org/xxx
的時候掛掉,原因你懂的。所以去掉-u
選項,禁止從網路更新現有程式碼。
# 先從github下載依賴工具的原始碼,fetch提示timeout不要管 go get -v github.com/ramya-rao-a/go-outline go get -v github.com/acroca/go-symbols go get -v github.com/mdempsky/gocode go get -v github.com/rogpeppe/godef go get -v github.com/zmb3/gogetdoc go get -v github.com/fatih/gomodifytags go get -v sourcegraph.com/sqs/goreturns go get -v github.com/cweill/gotests/... go get -v github.com/josharian/impl go get -v github.com/haya14busa/goplay/cmd/goplay go get -v github.com/uudashr/gopkgs/cmd/gopkgs go get -v github.com/davidrjenni/reftools/cmd/fillstruct go get -v github.com/alecthomas/gometalinter
- 安裝工具
go install github.com/ramya-rao-a/go-outline go install github.com/acroca/go-symbols go install github.com/mdempsky/gocode go install github.com/rogpeppe/godef go install github.com/zmb3/gogetdoc go install github.com/fatih/gomodifytags go install sourcegraph.com/sqs/goreturns go install github.com/cweill/gotests/... go install github.com/josharian/impl go install github.com/haya14busa/goplay/cmd/goplay go install github.com/uudashr/gopkgs/cmd/gopkgs go install github.com/davidrjenni/reftools/cmd/fillstruct go install github.com/alecthomas/gometalinter $GOPATH/bin/gometalinter --install go install golang.org/x/tools/cmd/godoc go install golang.org/x/lint/golint go install golang.org/x/tools/cmd/gorename go install golang.org/x/tools/cmd/goimports go install golang.org/x/tools/cmd/guru
-
整合到系統環境中
由於我是在使用者目錄下臨時安裝的,真正的GO環境是
/usr/local/go
,所以最後一步無比注意,把~/go/bin
下面生成的所有執行檔案拷貝到系統環境中
sudo cp -af $GOPATH/bin/* /usr/local/go/bin/
打完收工!