一、vscode插件
-
vscode插件商店
-
Go Team at Google:让vscode关联上go语言的开发环境
-
Outline Map:更好的代码大纲
-
Todo Tree:Todo的注释树
二、设置代理GOPROXY
- 华为云镜像:https://mirrors.huaweicloud.com/,也可以使用阿里云镜像;这里以华为云镜像为例
- 使用命令添加代理:多个代理可以使用","隔开;
direct
-> 表示从镜像下载失败后,直接从原版本库地址下载;off
:表示不允许从任何源下载
go env -w GOPROXY=https://repo.huaweicloud.com/repository/goproxy/,https://goproxy.nd.tevat.dev,https://goproxy.cn,direct
三、gopls
1 - vscode弹出插件支持安装
- vscode新建一个main.go
- vscode 会自动弹出插件安装:这里只需要安装gopls即可,go-outline之前已经在插件管理安装过了,直接x掉即可
- Install All:之前设置好了代理,这里选择install all;这里最关键的就是dlv(go的调试工具go-delve)和gopls;安装成功后可以在GOPATH的bin目录下看到对应的二进制文件;也可以手动安装 ->
go install golang.org/x/tools/gopls@latest
2 - 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 的工作原理:语言服务器(Language Server)作为单独的进程运行,开发工具在 LSP 基础上通过 JSON-RPC 与服务器通信
- ①.用户在开发工具中打开一个文件(称为文档):开发工具通知语言服务器文档已打开(textDocument/didOpen)。从现在开始,关于文档内容的真实信息不再存储在文件系统中,而是由开发工具保存在内存中。现在必须在开发工具和语言服务器之间同步内容
- ②.用户进行编辑:该开发工具通知服务器文档更改(textDocument/didChange),并由语言服务器更新文档的语言表示形式。在这种情况下,语言服务器会分析这些信息,并将检测到的错误和警告通知开发工具(textDocument/publishDiagnostics)
- ③.在打开的文档中,用户就一个符号(symbol)执行 Go to Definition:该开发工具发送一个带有两个参数的 “textdocument/Definition” 请求:(1)文档 URI 和(2)发出 “Go to Definition” 请求的文本位置,发送到服务器。服务器的响应包含文档 URI 和该符号在该文档中的定义位置
- ④.用户关闭文档(文件):开发工具发出 “textDocument/didClose” 的通知,告知语言服务器文档现在不在内存中了。文件系统上的当前内容现在是最新的
3 - gopls
- gopls是什么: gopls(读音:go please),是 LSP 的一个语言端(Server)实现,是针对 Go 语言的 LSP 实现;
gopls 是 Go 官方维护的
、对 LSP 的实现,即一个 Go 语言的官方 Language Server(目前 gopls 还不是稳定版本,处于 alpha 状态,所以 VSCode 默认没有启用它)
四、vscode设置
- 设置快捷键:CTRL + `
- 用户与工作区的区别:用户指的是所有项目的设置,工作区指的是当前项目的设置
- 不同项目通用的就配置在用户上
- 当前项目特有的就配置在工作区
- gopls设置:可以看到在当前的项目中就多了settings.json配置文件
五、常用快捷键设置
- 开启自动保存:文件 -> 自动保存(勾选)
- 设置快捷键入口:文件 -> 首选项 -> 键盘快捷方式
- CTRL+W:搜索
editor.action.smartSelect.grow
,设置为CRTL+W - CTRL+Y:搜索
删除行
,设置为CTRL+Y - CTRL+D:搜索
复制行
,将向下复制行设置为CTRL+D - CTRL+↑:搜索
全部折叠
,设置为CTRL+↑ - CTRL+↓:搜索
全部展开
,设置为CTRL+↓ - ALT+1:搜索
聚焦到最终组编辑器
,在任何位置点击 ALT+1 都可以返回到代码编辑器界面 - ALT+2:搜索
聚焦到终端
,在任何位置点击 ALT+2 都可以切换到终端界面