吾本轻狂|VSCode 建议你启用 gopls,它到底是个什么东东?( 二 )


{"jsonrpc": "2.0","id" : 1,"method": "textDocument/definition","params": {"textDocument": {"uri": "/Users/xuxinhua/project/golang/lsp/use.go"},"position": {"line": 3,"character": 12}}}对此请求的响应:
{"jsonrpc": "2.0","id": 1,"result": {"uri": "/Users/xuxinhua/project/golang/lsp/provide.go","range": {"start": {"line": 0,"character": 4},"end": {"line": 0,"character": 11}}}}如果你想要开发一个 Language Server , 可以看官方的协议规范 。
gopls 是什么经过上面对 LSP 的介绍 , 你应该猜到 gopls(读音:go please) 是什么了吧?!没错 , gopls 是 LSP 的一个语言端(Server)实现 , 是针对 Go 语言的 LSP 实现 。
在 LSP 官网列出了相关的实现 , 包括三个部分 。
1、Language Servers:列出各个语言的 LSP 实现其中 Go 语言的实现有两个:(Sourcegraph 的不再维护 , 因为集中维护一个会更好)
吾本轻狂|VSCode 建议你启用 gopls,它到底是个什么东东?在另一个由 Sourcegraph 维护的网站中 , 不但列出了实现 LSP 的语言 , 而且给出了它们对协议的实现完整性 。
吾本轻狂|VSCode 建议你启用 gopls,它到底是个什么东东?也就是说 gopls 是 Go 官方维护的、对 LSP 的实现 , 即一个 Go 语言的官方 Language Server 。
2、LSP Clients:列出支持 LSP 的开发工具包括 VSCode、Sublime Text、Atom、Emacs、Vim 和 Eclipse 等很多开发工具 。 在上文提到的两个网站都有列出 。
3、SDKs for LSP:为了方便开发为了方便开发 , 还有一些 LSP 的 SDK 可以使用 。 具体可以查看: 。
进一步了解 gopls首先说明下 , 目前 gopls 还不是稳定版本 , 处于 alpha 状态 , 所以 VSCode 默认没有启用它 。 项目地址: 。
目前 gopls 支持的特性包括:

  • Autocompletion
  • Jump to definition
  • Signature help
  • Hover
  • Document symbols
  • References
  • Rename
目前已知存在如下的问题:
  1. Editing multiple modules in one editor window: #32394[1]
  2. Type checking does not work in cgo packages: #35721[2]
  3. Does not work with build tags: #29202[3]
  4. Find references and rename only work in a single package: #32877[4]
当前 gopls 的工作重点是确保稳定性(期待发布 1.0 版本) , 之前一直受诟骂的是资源占用 , 目前已经好太多了 。
有如下编辑器支持 gopls , 你可以根据自己喜爱的编辑器查看相应的安装、配置说明 。
  • VSCode[5]
  • Vim / Neovim Vim/Neovim[6]
  • Emacs[7]
  • Acme[8]
  • Sublime Text[9]
  • Atom[10]
玩转 VSCode 的文章会详细介绍在 VSCode 中使用 gopls 。 同时 , 后续在 VSCode 开发其他语言项目时 , 也会介绍相应语言的 LSP 。
参考资料[1]
#32394:
[2]
#35721:
[3]
#29202:
[4]
#32877:
[5]
VSCode:
[6]
Vim / Neovim Vim/Neovim:
[7]
Emacs:
[8]
Acme:
[9]
Sublime Text:
[10]
【吾本轻狂|VSCode 建议你启用 gopls,它到底是个什么东东?】Atom:


推荐阅读