vscode 支持Go

2022-08-11 14:30 更新

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


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

安裝使用

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

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


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

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


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


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

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

Go

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

語言支持

IntelliSense

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

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

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

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

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

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

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

調(diào)試

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

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

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

Language Server(experimental)

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

問題和前瞻

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

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

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


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號