vscode 支持Go

2022-08-11 14:30 更新

VS Code上的 Go 語(yǔ)言插件,是由微軟官方推出的。Go 語(yǔ)言插件,是VS Code推出插件 API 時(shí)的首批插件,直到現(xiàn)在,也依然由VS Code團(tuán)隊(duì)成員進(jìn)行維護(hù)開(kāi)發(fā),項(xiàng)目地址是 https://github.com/microsoft/vscode-go 作為 VS Code 團(tuán)隊(duì)維護(hù)的項(xiàng)目,GitHub issues 是它唯一的反饋渠道。要安裝這個(gè)插件,你可以在VS Code的插件視圖里搜索 Go,也可以通過(guò)插件市場(chǎng)進(jìn)行下載。


VS Code也是 Go 團(tuán)隊(duì)官方推薦的開(kāi)發(fā)工具。

安裝使用

當(dāng)你從插件市場(chǎng)安裝了 Go 插件后,重啟VS Code,Go 插件就會(huì)在你第一次打開(kāi) Go 文件的時(shí)候被啟動(dòng)。

啟動(dòng)后,如果你還沒(méi)有設(shè)置過(guò) GOPATH 的話,VS Code會(huì)提示你,你既可以在自己的系統(tǒng)環(huán)境變量里添加 GOPATH,也可以在當(dāng)前項(xiàng)目的配置文件里配置 GOPATH。


設(shè)置正確的 GOPATH 后,VS Code就知道安裝 Go 的 package 保存到哪個(gè)文件夾內(nèi)了。

緊接著VS Code又跳出多個(gè)提示。這些提示是告訴你,如果想要在VS Code中使用自動(dòng)補(bǔ)全、代碼跳轉(zhuǎn)等功能,你需要安裝額外的 Go 的 package。所以,這里我建議選擇 Install All,之后如果你對(duì)某個(gè) package 的效果不滿(mǎn)意,也可以通過(guò)設(shè)置再進(jìn)行修改的。


比如,在我的系統(tǒng)上,我將 GOPATH 設(shè)置為 /Users/penlv/code/prototypes/gopath。然后選擇 Install All 后,我就能在輸出面板里,看到 Go 插件將要安裝的 packages。


不過(guò)值得注意的是,如果上面的安裝失敗了,輸出窗口中會(huì)提供錯(cuò)誤信息。因?yàn)?,這一步操作,底層運(yùn)行的命令行其實(shí)就是:

go get -u -v github.com/...

Go

像我就曾遇到了 Go 的版本太老,導(dǎo)致更新失敗的問(wèn)題。如果你遇到了自己無(wú)法解決的問(wèn)題,也可以到插件的 GitHub repository 留言,請(qǐng)注意要提供完整的信息,比如VS Code版本、插件版本以及 Go 的版本,以便更好地 toubleshoot。

語(yǔ)言支持

IntelliSense

首先,你可以在 Go 代碼中,進(jìn)行代碼跳轉(zhuǎn)(Go To Definition)、自動(dòng)補(bǔ)全(Auto Complete)以及獲取懸浮信息(Hover)。

Go 插件默認(rèn)是借助 gocode、gogetdoc和 godef 分析代碼,然后提供這些信息的。

構(gòu)建(build)、檢測(cè)(vet, lint)和格式化(Format)

在編寫(xiě) Go 代碼時(shí),經(jīng)常會(huì)用到go build、go tool vet、golint等腳本去構(gòu)建代碼,或者是對(duì)代碼進(jìn)行檢測(cè)。Go 插件已經(jīng)將這些功能集成到插件中了,你可以:

  • 打開(kāi) go.buildOnSave ,當(dāng)代碼保存時(shí),go build 將會(huì)自動(dòng)執(zhí)行。同時(shí),你可以使用 go.buildFlags 來(lái)指定 build 的參數(shù)。
  • 打開(kāi) go.vetOnSave 并且使用 go.vetFlags 來(lái)指定 vet 參數(shù)。
  • 打開(kāi) go.lintOnSave 并且使用 go.lintFlags 來(lái)指定 lint 參數(shù)。并且,你可以通過(guò) go.lintTool 來(lái)選擇你想要的 lint 工具。
  • 打開(kāi) go.testOnSave 在代碼保存時(shí)測(cè)試代碼。

當(dāng)你使用這些參數(shù)來(lái)自動(dòng)觸發(fā)腳本時(shí),Go 插件會(huì)將這些腳本的輸出結(jié)果進(jìn)行分析,然后將錯(cuò)誤和警告放入到問(wèn)題面板中。

默認(rèn)情況下,當(dāng)保存代碼時(shí),VS Code會(huì)自動(dòng)給 Go 代碼進(jìn)行格式化。如果你不喜歡這個(gè)功能,也可以通過(guò) go.formatOnSave 來(lái)取消。

調(diào)試

Go 插件同樣支持調(diào)試 Go 的代碼,而其底層的 debugger 則是 delve。如果你第一次使用 Go 插件時(shí)選擇了 Install All 安裝所有的 package,那么就無(wú)需再安裝任何的 package了。而如果你沒(méi)有全部安裝,那么你可能需要手動(dòng)安裝 dlv 這個(gè) package。

和之前我們介紹的 Node.js 調(diào)試一樣,如果沒(méi)有 launch.json 的話,VS Code會(huì)默認(rèn)調(diào)試當(dāng)前文件。

同樣,Go 插件也提供了多個(gè)調(diào)試的模板

Language Server(experimental)

VS Code的 Go 插件,默認(rèn)是使用 gocode、godef 等 package 來(lái)提供智能語(yǔ)言服務(wù)的。不過(guò) GO 插件中還有一個(gè)正在處于試驗(yàn)階段的 Language Server (也就是 LSP 的實(shí)現(xiàn)),你可以通過(guò)設(shè)置 go.useLanguageServer 將其打開(kāi)。但是這個(gè) Language Server 并不支持 Windows,且處于試驗(yàn)階段,關(guān)于更多的信息,請(qǐng)查看文檔

問(wèn)題和前瞻

綜合我個(gè)人使用 Go 插件時(shí)候的體驗(yàn),以及 Go 插件維護(hù)者的分享,下面這些問(wèn)題是新用戶(hù)經(jīng)常會(huì)遇到的:

  • GOPATH 的設(shè)置。如果你從來(lái)沒(méi)有寫(xiě)過(guò) Go 的話,一開(kāi)始可能會(huì)對(duì) GOPATH 摸不著頭腦,那你可以通過(guò)Go 的官方文檔了解它的用途。
  • 如果你在設(shè)置中添加了 GOPATH,而不是系統(tǒng)的環(huán)境變量的話,要注意 Go 插件最終使用的 GOPATH 跟你在集成終端中使用命令行腳本時(shí)會(huì)不一樣。
  • Go 插件默認(rèn)使用的格式化工具是 SourceGraph 正在使用的 goreturns,如果你發(fā)現(xiàn)默認(rèn)的格式化效果并不是你想要的,那你可以通過(guò)修改 go.formatTool 將其替換,比如使用官方的 gofmt。

根據(jù)每年Go相關(guān)的 Survey 和官方數(shù)據(jù),Go 社區(qū)的新晉用戶(hù)更傾向于使用VS Code來(lái)進(jìn)行 Go 的編程。于是 Go 團(tuán)隊(duì)決定親自書(shū)寫(xiě)一套 Go 的 Language Server,以提升VS Code上 Go 的書(shū)寫(xiě)體驗(yàn)。上面我提到的 Language Server 是 SourceGraph 團(tuán)隊(duì)實(shí)現(xiàn)的,Go 團(tuán)隊(duì)可能不會(huì)基于它們的代碼進(jìn)行修改,而是重起爐灶。對(duì)于官方團(tuán)隊(duì)的投入,讓我對(duì) Go 在VS Code里前景非常有信心。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)