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

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

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

目前该协议得到了编辑器和语言社区的广泛支持。语言服务器协议背后的思想是为这些服务器和开发工具的通信方式提供标准化协议支持。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

    推荐阅读
  • 孩子晕车要吐怎么办(孩子晕车解决方法)

    以下内容大家不妨参考一二希望能帮到您!孩子晕车要吐怎么办小孩子晕车时出现呕吐是一种很常见的情况。首先,为了预防晕车呕吐可以在乘车前口服晕车药。其次,乘车前睡眠要充足,不要过度劳累,进食不要过饱或者是过饥。再者,乘车时也可以尽量坐在汽车的前部减少颠簸,注意开窗通风。

  • 柯达相机广告(我与柯达相机的故事)

    成立了自己的公司NagelCameraWerksAG,生产Nagel系列相机,包括玻璃板、胶片和胶卷相机。Retina相机以其紧凑的尺寸、高质量和低成本而赢得用户的好评,但小问题颇多,只能不断改进技术推出新款相机。RetinaII共有四大类型号,其中又衍生不同版本。此款因生产极其稀少目前市面价格接近2万余元一台,是柯达相机价值比较大的一款。公司在2019年入职的一名结构工程师姓李,是公司入职的第一位结构工程师。

  • 农民工工资被冻结情况(解冻了这个账户后)

    依据原告的诉讼保全申请,天台法院依法裁定冻结了三家被告公司名下的银行账户,共计人民币711万元。新昌公司提出异议:公司名下被保全的其中一个账户是某工程民工工资的专用账户,目前账户内共有资金59.4万。对此,负责该案的忻法官立即向各公司的负责人了解相关情况。为证实异议属实,新昌公司向法院提交了该账户的执行监管协议、交通工程款明细及工程款备案表、银行明细清单、银行2019年12月银流水等原件各一份。

  • 胃病怎么吃三餐养胃(春天养胃好时机)

    甚至会诱发一些新胃病,损害身体健康,因此,严防胃病很重要。木瓜含木瓜酵素,有助于分解并加速蛋白质吸收,可缓解消化不良和胃炎。常饮三水1、花草茶水饮茶,在调理脾胃方面,有其独特的优势。另外饭前一个小时左右服用温蜂蜜水,还可以抑制胃酸分泌,减少胃黏膜刺激。熬夜会削减胃屏障自保能力,大大增加胃溃疡的机会。

  • 赵丽颖冯绍峰9年前就有交集(赵丽颖冯绍峰官宣离婚)

    赵丽颖冯绍峰9年前就有交集赵丽颖和冯绍峰官宣离婚了。他们发布声明,向大家宣布,俩人已决定和平分手,结束婚姻关系,并已办理完相关手续。而她产后半年,早已拎上大刀赶往片场去了。热播剧《小舍得》中,蒋欣饰演的田雨岚,虽然前段与老公感情和睦。但布谷妈认为,他们的感情,其实是经不起折腾的。他与田雨岚的理念、思想早已不在同一条跑道上。

  • 番茄炒蛋的做法与步骤(具体是怎样的)

    以下内容希望对你有帮助!番茄炒蛋的做法与步骤番茄洗净切小块,放入碗中备用,蒜切片剁成末,备用。热油锅后,倒入鸡蛋液,煎熟后用锅铲铲散,盛出备用。热油锅放入蒜末爆香,放入番茄翻炒出汁,加入白糖翻炒均匀,放入鸡蛋翻炒均匀,加入适量的盐和鸡精翻炒均匀即可,这道番茄炒蛋就算完成。

  • 小雅伐木伐木丁丁鸟鸣嘤嘤的意思(该句出自何处)

    小雅伐木伐木丁丁鸟鸣嘤嘤的意思意思:咚咚作响伐木声,嘤嘤群鸟相和鸣。出自先秦佚名的《伐木》伐木丁丁,鸟鸣嘤嘤。神之听之,终和且平。既有肥羜,以速诸父。於粲洒扫,陈馈八簋。既有肥牡,以速诸舅。伐木于阪,酾酒有衍。民之失德,乾餱以愆。伐木呼呼斧声急,滤酒清纯无杂质。打扫房屋示隆重,嘉肴八盘桌上齐。伐木就在山坡边,滤酒清清快斟满。行行笾豆盛珍馐,兄弟叙谈莫疏远。有人早已失美德,一口干粮致埋怨。

  • 父母必读100本书籍(为人父母必读这三本书)

    今天终于读完了龙应台人生三书,推荐给所有父母,这是家庭教育课程中必修三本书。细细品读,会受益良多,不同时期的父母读来感受也不一样。目送中,“我慢慢地、慢慢地了解到,所谓父女母子一场,只不过意味着,你和他的缘分就是今生今世不断地在目送他的背影渐行渐远。你站在小路的这一端,看着他逐渐消失在小路转弯的地方,而且,他用背影默默告诉你:不必追”看哭了多少孩子已经成年的父母。人生,有些路,只能一个人走…

  • 身高有1米78体重是多少为正常(体重应该是多少才是比较正常的呢)

    身高有1米78体重是多少为正常?这些人有明显的肥胖症状,可能会引发很多的病症,应该要及时去医院进行检查,并且开始减肥。有些女性因为平时对于自己的身材比较苛刻,所以会达不到120斤,只有110斤左右,其实这也是正常的,只是属于偏瘦情况,而140斤高出的话,则是属于偏胖的现象。

  • 最值钱的翡翠烟嘴(市场上最值钱的翡翠烟嘴一览)

    最值钱的翡翠烟嘴老翡翠烟嘴本来是清朝十分盛行的一种烟具,但随着历史的迁徙,发展到现在,老翡翠烟嘴已经是非常少见的了。所以说如果你在现在的社会上遇见了翡翠烟嘴,它很有可能是从清代遗留下来的老翡翠烟嘴,你可别小看这一个小小的老翡翠烟嘴,在现在的社会上,他们可是价值不菲哦。清代玉烟嘴,真品品种比较丰富;真品常见版式品相好的市场上一般喊价在100-10000左右;不过也有特殊品种版式。