Gopls:Go 的語言伺服器
gopls
(發音為“Go please”)是 Go 官方的 語言伺服器,由 Go 團隊開發。它為任何 LSP 相容編輯器提供了廣泛的 IDE 功能。
您通常不需要直接與 gopls
互動,它會自動整合到您的編輯器中。具體的功能和設定因編輯器而異,因此我們建議您繼續檢視下面的 編輯器的文件。此外,gopls 關於每個功能的文件會描述其在每個客戶端編輯器中是否受支援。
本文件(https://golang.org.tw/gopls)描述了 gopls 的最新發布版本。要預覽開發中版本的文件,請訪問 https://tip.golang.org/gopls。
功能
Gopls 支援廣泛的標準 LSP 功能,涵蓋導航、補全、診斷、分析和重構,以及一些其他語言伺服器中沒有的附加功能。
請參閱 功能索引,瞭解 Gopls 能為您做些什麼的完整文件。
編輯器
要開始使用 gopls
,請在您選擇的編輯器中安裝一個 LSP 外掛。
如果您使用的編輯器不在這個列表中,但仍在使用 gopls
,請傳送一個 CL 更新此文件。
安裝
要安裝 gopls
的最新穩定版本,請執行以下命令
go install golang.org/x/tools/gopls@latest
某些編輯器(如 VS Code)會自動處理此步驟,並確保在釋出新穩定版本時 Gopls 得到更新。
更新後,您可能需要重新啟動正在執行的 Gopls 程序才能看到效果。每個客戶端都有其重啟伺服器的方式。(在 UNIX 系統上,您可以使用命令 killall gopls
。)
在 高階安裝說明 中瞭解更多資訊。
釋出
Gopls 的 釋出版本 遵循 語義化版本控制,重大更改和新功能僅在新小版本中引入(即形式為 v*.N.0
的版本,其中 N 為某個數字)。後續的補丁版本僅包含精選的修復或表面更新。
為了與 Go 釋出週期 對齊,我們計劃根據下表,大約每三個月釋出一個新的 Gopls 小版本,補丁版本大約每月釋出一次。
月份 | 版本(s) |
---|---|
一月 | v*.<N+0>.0 |
一月-三月 | v*.<N+0>.* |
四月 | v*.<N+1>.0 |
四月-六月 | v*.<N+1>.* |
七月 | v*.<N+2>.0 |
七月-九月 | v*.<N+2>.* |
十月 | v*.<N+3>.0 |
十月-十二月 | v*.<N+3>.* |
有關此策略的更多背景資訊,請參閱 https://golang.org.tw/issue/55267。
設定工作區
gopls
支援 Go module、多 module 和 GOPATH 模式。請參閱 工作區文件,瞭解支援的工作區佈局資訊。
配置
您可以配置 gopls
來改變您的編輯器體驗或檢視額外的除錯資訊。配置選項將透過您的編輯器提供,因此請參閱您的 編輯器的說明 以獲取具體細節。gopls
設定的完整列表可以在 設定文件 中找到。
環境變數
gopls
繼承您編輯器的環境,因此請注意您配置的任何環境變數。某些編輯器(如 VS Code)允許使用者選擇性地覆蓋某些環境變數的值。
支援策略
Gopls 由 Go tools 團隊 的工程師維護,他們積極監控 Go 和 VS Code Go 的問題跟蹤器。
支援的 Go 版本
gopls
遵循 Go 釋出策略,這意味著它僅官方支援最新的兩個主要 Go 釋出版本。
在使用 gopls 時,有三個版本需要注意:
- gopls 構建的 Go 版本:用於構建 gopls 的 Go 版本。
- go 命令版本:gopls 執行的 go list 命令版本,用於載入關於您工作區的資訊。
- 語言版本:當前檔案的包含的 go.mod 檔案中的 go 指令版本,它決定了檔案的 Go 語言語義。
從 2024 年 8 月釋出 Go 1.23.0 和 gopls@v0.17.0 開始,我們將僅支援最新的 Go 版本作為gopls 構建的 Go 版本。然而,由於 Go 1.21 中新增的 向前相容性 支援,只要使用 Go 1.21 或更高版本安裝 gopls,任何必需的工具鏈升級都將自動處理,就像任何其他依賴項一樣。
此外,從 gopls@v0.17.0 開始,go 命令版本將從 4 個版本縮小到 3 個。這與 Go 釋出策略更加一致。
Gopls 支援所有 Go 版本作為其語言版本,透過提供基於語言版本的編譯器錯誤以及根據該 Go 版本可用的標準庫 API 過濾可用標準庫符號。
維護對使用舊版本 Go 構建 gopls 的支援給 gopls 維護者帶來了重大阻礙,並阻礙了其他改進。如果您無法在您的系統上安裝受支援的 Go 版本,您仍然可以安裝一箇舊版本的 gopls。下表顯示了支援給定 Go 版本的最後一個 gopls 版本。比表中版本更新的 Go 釋出版本可以使用任何版本的 gopls。
Go 版本 | 最終支援的 gopls 版本(無警告) |
---|---|
Go 1.12 | gopls@v0.7.5 |
Go 1.15 | gopls@v0.9.5 |
Go 1.17 | gopls@v0.11.0 |
Go 1.18 | gopls@v0.14.2 |
Go 1.20 | gopls@v0.15.3 |
支援的構建系統
gopls
目前僅支援 go
命令,因此如果您使用不同的構建系統,gopls
可能無法很好地工作。Bazel 不受官方支援,但透過一個配置正確的 go/packages 驅動程式 可能會起作用。有關更多資訊,請參閱 bazelbuild/rules_go#512。您可以按照這些說明配置您的 gopls
以與 Bazel 配合使用。
故障排除
如果您在使用 gopls
時遇到問題,請遵循 故障排除指南 中描述的步驟。
其他資訊
本文件的原始碼可以在 golang.org/x/tools/gopls/doc 下找到。