vscode如何查看修改过的部分_编辑器 VS Code 如何快速查看 Go 接口?
背景
使用 vscode 閱讀 Go 項目源碼時,有個不太方便的地方,就是跟蹤 interface 的實現。vscode 只能追到 interface 定義的地方,而無法定位到其具體的實現。比如,我在追 etcd 關于 revision 的讀取的時候只能追到這里:
如果項目比較小,還比較容易對付,因為按照習慣來講,其實現往往都在對應接口的下方。但是遇到這種像 etcd 的項目就抓瞎了,因為其實現可能會跨越多個文件。好在 vscode 有個非常好用的功能:Go to Implementation
Ctrl+F12 就能找到實現了該 interface 的所有方法,然后再結合上下文,這樣就很容易把調用關系都串下來。
vscode 之所以能夠找到這些調用關系,依賴的是 Go 官方提供的代碼導航工具:guru,它有幾個缺點:
查找速度慢
不支持 Go Module
官方不再維護
gopls
微軟在開發 VS Code 過程中, 定義一種協議, 語言服務器協議:Language Server Protocol,用來統一不同語言的靜態檢測、自動補全問題。
gopls 就是 Go Team 目前正在積極維護的 lsp,有望成為 vscode Go 插件的默認補全工具。它最大的優點就是非常快,和 guru 相比有質的提升,同時還支持 Go Module。當然也少不了缺點:不支持 Go to Implementation(其實已經實現了,只是還沒有發布)
如果你想現在就用上這個特性,可以有兩個選擇:
自己編譯?master?分支的?gopls
使用?bingo?的 lsp(?bingo?的作者參考了?guru?的實現單獨 fork 了一個版本)
當然也可以用我目前的方案:
我的 Go 項目基本都會拷貝 vendor,所以并不希望開啟 mod 支持。另外禁用 gopls 的 goToTypeDefinition、 goToImplementation 選項,這樣 vscode 就會繼續用 guru 的實現。
此外,linter 工具我選擇的是 golangci-lint,并沒有使用官方的 golint,主要是因為后者煩人的「exported method should have comment or be unexported」建議,而前者還支持檢測內存對齊,非常有用。
最后貼下我的完整配置:
// For Golang
// "go.goroot": "C:\\go",
// "go.gopath": "${workspaceRoot}",
"go.useLanguageServer": true,
"go.inferGopath": true,
"go.buildOnSave": "off",
"go.lintTool": "golangci-lint",
"go.lintFlags": ["--disable-all"],
"go.vetFlags": [],
"go.autocompleteUnimportedPackages": true,
"go.gotoSymbol.includeImports": false,
"go.gotoSymbol.includeGoroot": false,
"go.useCodeSnippetsOnFunctionSuggest": true,
"go.formatTool": "goreturns",
"go.docsTool": "gogetdoc",
"[go]": {
"editor.snippetSuggestions": "top",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": true
}
},
"go.toolsEnvVars": {
"GO111MODULE": "off",
"GOPROXY": "https://goproxy.cn,direct",
"GOSUMDB": "gosum.io+ce6e7565+AY5qEHUk/qmHc5btzW45JVoENfazw8LielDsaI+lEbq6",
},
"go.languageServerExperimentalFeatures": {
"format": true,
"autoComplete": true,
"rename": true,
"goToDefinition": true,
"hover": true,
"signatureHelp": true,
"goToTypeDefinition": false,
"goToImplementation": false,
"documentSymbols": true,
"workspaceSymbols": true,
"findReferences": true,
"diagnostics": false,
"completeUnimported": true,
"watchFileChanges": true,
"deepCompletion": true,
},
"go.languageServerFlags": [
"-rpc.trace",
"serve",
"--debug=localhost:6060",
],
參考文獻
Search for implementations doesn't work
x/tools/gopls: support module-local implementation request
Use gogetdoc instead of godef and godoc
推薦閱讀
用 70 行 Go 代碼擊敗 C 語言
Go 語言最優秀的 IDE:免費獲取 Goland,你有資格嗎?
喜歡本文的朋友,歡迎關注“Go語言中文網”:
Go語言中文網啟用微信學習交流群,歡迎加微信:274768166
總結
以上是生活随笔為你收集整理的vscode如何查看修改过的部分_编辑器 VS Code 如何快速查看 Go 接口?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 脏数据查询_MySQL数据库
- 下一篇: linux 压缩为多个文件,在Linux