植物百科网
当前位置: 首页 农业百科

vscode的优势是什么(VSCode建议你启用gopls)

时间:2023-05-12 作者: 小编 阅读量: 6 栏目名: 农业百科

目前该协议得到了编辑器和语言社区的广泛支持。语言服务器协议背后的思想是为这些服务器和开发工具的通信方式提供标准化协议支持。LSP是语言提供商和工具供应商的双赢!服务器的响应包含文档URI和该符号在该文档中的定义位置。在LSP官网列出了相关的实现,包括三个部分。也就是说gopls是Go官方维护的、对LSP的实现,即一个Go语言的官方LanguageServer。进一步了解gopls首先说明下,目前gopls还不是稳定版本,处于alpha状态,所以VSCode默认没有启用它。

要谈 gopls,得先聊聊 LSP。

LSP 是什么

LSP,全称 Language Server Protocol,即语言服务器协议,这是微软创建的一个协议(目前已有 Codenvy,Red Hat 和 Sourcegraph 等公司一起支持它的发展)。定义了在编辑器或 IDE 中与语言服务器之间使用的协议,该语言服务器提供诸如自动完成,转到定义,查找所有引用等语言功能。语言服务器索引格式(LSIF,其发音类似于“ else if”)的目标是支持开发工具或 Web UI 中的富代码导航,而不需要源代码的本地副本。

目前该协议得到了编辑器和语言社区的广泛支持。

LSP 的官方网站:https://microsoft.github.io/language-server-protocol/,GitHub 地址:https://github.com/Microsoft/language-server-protocol。目前最新版本(2020-09-06):3.15。

LSP 解决了什么问题

为编程语言添加诸如自动完成、转到定义或鼠标悬停出现文档之类的功能需要付出大量的努力。传统上,这项工作必须为每个开发工具重复进行,因为每个工具为实现相同的特性提供不同的 api。

语言服务器(Language Server)旨在提供特定语言的智能功能,并通过支持进程间通讯协议与开发工具进行通信。

语言服务器协议(LSP)背后的思想是为这些服务器和开发工具的通信方式提供标准化协议支持。通过这种方式,可以在多个开发工具中重用单个 Language Server,而这些工具反过来可以用最少的工作支持多种语言。

例如,之前需要为 VSCode 构建 Go 插件、为 Sublime Text 构建 Go 插件、为 Vim 构建 Go 插件、为 Sourcegraph 构建 Go 插件,很多重复的工作。现在,对于每种语言,LSP 允许语言社区将精力集中在一个高性能语言服务器上,这个服务器可以提供代码完成,悬停文档提示、跳转到定义、查找引用等功能,而编辑器和客户端社区可以专注于构建一个单一的、高性能的、直观的和惯用的扩展,这个扩展可以与任何语言服务器通信,即时提供深入的语言支持。

LSP 是语言提供商和工具供应商的双赢!

LSP 的工作原理

语言服务器(Language Server)作为单独的进程运行,开发工具在 LSP 基础上通过 JSON-RPC 与服务器通信。下面是一个开发工具和语言服务器在进行编辑时如何通信的例子:

图片来自 LSP 官网,演示了协议如何在文档引用(uri)和文档位置级别与语言服务器通信。这些数据类型与编程语言无关,适用于所有编程语言。

  • 用户在开发工具中打开一个文件(称为文档):开发工具通知语言服务器文档已打开(textDocument/didOpen)。从现在开始,关于文档内容的真实信息不再存储在文件系统中,而是由开发工具保存在内存中。现在必须在开发工具和语言服务器之间同步内容。
  • 用户进行编辑:该开发工具通知服务器文档更改(textDocument/didChange),并由语言服务器更新文档的语言表示形式。在这种情况下,语言服务器会分析这些信息,并将检测到的错误和警告通知开发工具(textDocument/publishDiagnostics)。
  • 在打开的文档中,用户就一个符号(symbol)执行 Go to Definition:该开发工具发送一个带有两个参数的 “textdocument/Definition” 请求:(1)文档 URI 和(2)发出 “Go to Definition” 请求的文本位置,发送到服务器。服务器的响应包含文档 URI 和该符号在该文档中的定义位置。
  • **用户关闭文档(文件) **:开发工具发出 “textDocument/didClose” 的通知,告知语言服务器文档现在不在内存中了。文件系统上的当前内容现在是最新的。

看一个具体的 “textDocument/definition” 示例,以 Go 语言为例,请求如下:

{"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 的不再维护,因为集中维护一个会更好)

在另一个由 Sourcegraph 维护的网站 https://langserver.org/ 中,不但列出了实现 LSP 的语言,而且给出了它们对协议的实现完整性。

也就是说 gopls 是 Go 官方维护的、对 LSP 的实现,即一个 Go 语言的官方 Language Server

2、LSP Clients:列出支持 LSP 的开发工具

包括 VSCode、Sublime Text、Atom、Emacs、Vim 和 Eclipse 等很多开发工具。在上文提到的两个网站都有列出。

3、SDKs for LSP:为了方便开发

为了方便开发,还有一些 LSP 的 SDK 可以使用。具体可以查看:https://microsoft.github.io/language-server-protocol/implementors/sdks/。

进一步了解 gopls

首先说明下,目前 gopls 还不是稳定版本,处于 alpha 状态,所以 VSCode 默认没有启用它。项目地址:https://github.com/golang/tools/tree/master/gopls。

目前 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: https://github.com/golang/go/issues/32394

[2]

#35721: https://github.com/golang/go/issues/35721

[3]

#29202: https://github.com/golang/go/issues/29202

[4]

#32877: https://github.com/golang/go/issues/32877

[5]

VSCode: https://github.com/golang/tools/blob/master/gopls/doc/vscode.md

[6]

Vim / Neovim Vim/Neovim: https://github.com/golang/tools/blob/master/gopls/doc/vim.md

[7]

Emacs: https://github.com/golang/tools/blob/master/gopls/doc/emacs.md

[8]

Acme: https://github.com/golang/tools/blob/master/gopls/doc/acme.md

[9]

Sublime Text: https://github.com/golang/tools/blob/master/gopls/doc/subl.md

[10]

Atom: https://github.com/golang/tools/blob/master/gopls/doc/atom.md

    推荐阅读
  • 突触名词解释(突触是什么意思)

    突触名词解释突触是指一个神经元的冲动传到另一个神经元或传到另一细胞间的相互接触的结构。突触是神经元之间在功能上发生联系的部位,也是信息传递的关键部位。在光学显微镜下,可以看到一个神经元的轴突末梢经过多次分支,最后每一小支的末端膨大呈杯状或球状,叫做突触小体。这些突触小体可以与多个神经元的细胞体或树突相接触,形成突触。从电子显微镜下观察,可以看到,这种突触是由突触前膜、突触间隙和突触后膜三部分构成。

  • 《守望先锋》对战局影响大招top一览 守望先锋对局战绩

    今天小编要为大家带来的是玩家“黑呦酱”分享的《守望先锋》对战局影响大招top一览,感兴趣的玩家赶紧一起来看看吧!守望先锋大招分为四类,控制类,自身BUFF类,辅助类以及伤害类,由于伤害类大部分使用大招时,本体无法进行有效杀伤,且控制类及自身BUFF类需要其他技能的配合,so,此间因素也要加入考量。

  • 运动后喝黑咖啡还能燃脂吗 运动时喝黑咖啡会加快燃脂吗?

    2、运动过程中身体脂肪会加速燃烧,从而具有一定减肥作用;而黑咖啡热量比较小,加上其中含有大量的咖啡因以及维生素、纤维素物质,适量喝可以促进人体肠胃蠕动,加速脂肪代谢分解,对减肥具有促进作用。

  • 斯威汽车质量怎么样(斯威质量好不好)

    2018年6月起,斯威“品质特工队”以四大火炉的重庆作为起点,途径海南、吐鲁番、格尔木三地,历时近一年进行了数十万公里极限环境适应性试验。极端干燥高温环境下,常见车内温度往往会狂飙到60℃以上,而在斯威G01的车厢里,却始终能够保持清新凉爽的状态。一整套严酷考验下来,斯威G01的性能表现完全得以充分认证。这样一算,斯威G01差不多完成了近百万公里的专业级严酷考验。

  • 春天兰花怎么养 春天兰花怎么养浇水

    白墨兰花哪个品种最好白墨兰花是墨兰的珍贵变异品种假鳞茎椭圆形,已有数百年栽培历史,流传至今,不下十数个品种,它叶色莹润、体态优雅、幽香静远、且抗病,白墨兰花比较好的品种一般分企剑和软剑两个品系。什么兰花开花最香兰花品种很多,按花香来排,在兰花界春兰居首,惠兰次之,随后便是建兰、墨兰和寒兰,春兰的花香味最正宗,持久性也极强。

  • 奔驰e300l前进挡总共有几个(你看了奔驰22款E300L升级这套原厂HUD抬头显示效果觉得怎么样)

    从行车安全的角度来考虑,加装一台HUD是非常有必要的。HUD的全称是HeadUpDisplay,中文翻译过来就是抬头显示器。今天星骏汇小陈通过以上的产品配件图了解,我们看到这台奔驰22款E300L升级HUD抬头显示所需要更换的配件有,抬显仪器,高配仪表盖板,高配仪表电脑,雨量传感器,空调管升级HUD抬头显示把仪表台上的那一块盖板换掉,换成高配的预留好显示器孔位的盖板,装上显示器,从而使仪表显示的内容投射到挡风玻璃上面。

  • 儿童葫芦丝表演(通城千人共奏葫芦丝)

    儿童葫芦丝表演香城都市报讯 10月27日,通城县隽水中学参加湖北省“黄鹤杯”美育节节目视频录制现场,七、八年级千名学生,同奏乐曲《龙的传人》。该校相关负责人介绍,本学期,每天下午预备铃响5分钟,七、八年级各班集体合奏葫芦丝。丝竹声声,已渐成校园一道靓丽的风景线。近年来,该校贯彻落实社会主义核心价值观,注重未成年人思想道德建设,坚持开设中华传统和特色民族特色教育课程,促进学生“德智体”全面发展。

  • 鸡娃时代孩子的成长之道(与其1岁就开始鸡娃)

    出生时大脑发育已经完成25%,1岁完成了50%,3岁完成了60%,6岁达到90%。现在小学虽然是零基础入学,取消了统一考试,但是它对学生的要求并没有降低。吃够了佛系养娃的亏,橙子家的老二断然不肯再佛系养了。北京卫视于2018年摄制的纪录片《起跑线》中,有一个7岁的北京女孩令人印象深刻。她的家庭,在北京三环内有一套房,一辆车。妈妈认为,孩子从小培养兴趣,靠的是父母的指引。

  • 环氧树脂的作用与用途(环氧树脂有什么作用与用途)

    环氧树脂的作用与用途具有优良的物理和电绝缘性能,强度高、收缩性低,耐腐蚀以及有高绝缘的优势,所以被称为万能胶。电器、电机绝缘封装件的浇注。从常压浇注、真空浇注已发展到自动压力凝胶成型。长时间接触胶水时,有人会有细微的皮肤过敏和细微瘙痒疼痛的情况,建议在运用时戴上防护手套,如果出现了这样的情况,需要用酒精擦洗,然后用清水冲洗干净。

  • 明月曾照江东寒剧情(明月曾照江东寒剧情介绍)

    明月曾照江东寒剧情剧情简介:美少女战清泓是武林副盟主战破敌之女,从小被父亲禁止涉及江湖事。十年一期的武林大会即将来临,战清泓瞒着家人偷跑下山,立志夺取武林盟主之位。战清泓与温宥也开始互生情愫,奈何最终被世俗礼法所阻碍。与此同时,江湖上风起云涌,战清泓发现自己自幼背诵的家训竟是人人趋之若鹜的第一神功《鹤羽剑法》。