Gopls:Go 的語言伺服器

PkgGoDev

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 團隊 的工程師維護,他們積極監控 GoVS Code Go 的問題跟蹤器。

支援的 Go 版本

gopls 遵循 Go 釋出策略,這意味著它僅官方支援最新的兩個主要 Go 釋出版本。

在使用 gopls 時,有三個版本需要注意:

  1. gopls 構建的 Go 版本:用於構建 gopls 的 Go 版本。
  2. go 命令版本:gopls 執行的 go list 命令版本,用於載入關於您工作區的資訊。
  3. 語言版本:當前檔案的包含的 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 下找到。