现已发布!阅读 10 月份的新功能和修复。

在 Visual Studio Code 中使用 Go

使用 Visual Studio Code 的 Go 扩展,您可以获得 IntelliSense、代码导航、符号搜索、测试、调试等功能,这些功能将帮助您进行 Go 开发。

Go extension banner

您可以从 VS Code 市场 安装 Go 扩展。

观看 "VS Code Go 入门",了解如何使用 VS Code Go 构建您的第一个 Go 应用程序。

本文仅描述了 Go 扩展提供的部分功能。有关完整且最新的支持功能列表,请参阅扩展的 文档

IntelliSense

IntelliSense

IntelliSense 功能由 Go 语言服务器 gopls 提供,该服务器由 Go 团队维护。您可以使用 gopls 设置 配置 gopls 的行为。

语义语法高亮显示

为了获得比默认基于 TextMate 的语法高亮显示更好的语法高亮显示,我们建议通过开启 Gopls 的 ui.semanticTokens 设置来启用 语义高亮显示

"gopls": { "ui.semanticTokens": true }

自动补全

在 Go 文件中输入时,您可以看到 IntelliSense 提供的建议补全。这甚至适用于当前、导入和尚未导入的包中的成员。只需键入任何包名称,然后输入 .,您将获得相应包成员的建议。

提示:使用 ⌃Space(Windows、Linux Ctrl+Space 手动触发建议。

悬停信息

将鼠标悬停在任何变量、函数或结构上,将显示有关该项的信息,例如文档、签名等。

签名帮助

在调用函数时打开 ( 时,将弹出一个提供函数签名帮助的弹出窗口。当您继续键入参数时,提示(下划线)将移动到下一个参数。

提示:使用 ⇧⌘Space(Windows、Linux Ctrl+Shift+Space 在光标位于函数调用中 () 内时手动触发签名帮助。

代码导航

代码导航功能在编辑器中的上下文菜单中可用。

  • 转到定义 F12 - 转到类型定义的源代码。
  • 转到类型定义 - 转到定义符号的类型。
  • Peek 定义 ⌥F12(Windows Alt+F12,Linux Ctrl+Shift+F10 - 使用类型定义打开一个 Peek 窗口。
  • 转到引用 ⇧F12(Windows、Linux Shift+F12 - 显示类型的所有引用。
  • 显示调用层次结构 ⇧⌥H(Windows、Linux Shift+Alt+H - 显示对函数的所有调用或从函数的所有调用。
  • 转到实现 ⌘F12(Windows、Linux Ctrl+F12 - 使用实现接口的列表(如果使用接口类型符号触发)或类型实现的接口(如果使用具体类型符号触发)打开一个 Peek 窗口。
  • 查找所有实现 - 显示接口的所有实现(如果使用接口类型符号触发)或类型实现的接口(如果使用具体类型符号触发)。

您可以使用命令面板(⇧⌘P(Windows、Linux Ctrl+Shift+P)中的转到符号命令通过符号搜索进行导航。

  • 转到文件中的符号 - ⇧⌘O(Windows、Linux Ctrl+Shift+O
  • 转到工作区中的符号 - ⌘T(Windows、Linux Ctrl+T

您还可以使用Go: 切换测试文件命令在 Go 文件与其测试实现之间来回导航。

构建和诊断

Go 语言服务器 (gopls) 会检测工作区中发现的构建和 vet 错误。运行任何/所有上述命令产生的错误和警告将在编辑器中显示为红色/绿色波浪线。这些诊断信息还会显示在问题面板中(视图 > 问题)。

您可以使用 go.lintOnSave 设置添加额外的代码风格检查,并使用 go.lintTool 设置配置您选择的代码风格检查工具 (staticcheckgolangci-lintrevive)。

格式化

您可以使用 ⇧⌥F(Windows Shift+Alt+F,Linux Ctrl+Shift+I 或通过从命令面板或编辑器中的上下文菜单运行格式化文档命令来格式化 Go 文件。

默认情况下,在您保存 Go 文件时会运行格式化。您可以通过将 editor.formatOnSave 设置为 false 来禁用此行为,该设置针对 [go] 语言标识符。您可以使用 JSON 设置文件更改此设置。

"[go]": {
        "editor.formatOnSave": false
}

当您为 Go 文件激活了多个格式化程序时,您可以选择 Go 扩展作为默认格式化程序。

"[go]": {
    "editor.defaultFormatter": "golang.go"
}

格式化由 gopls 提供。如果您希望使用 gofumpt 风格的格式化,您可以配置 gopls 以使用 gofumpt

"gopls": {
    "formatting.gofumpt": true
}

测试

VS Code 的 测试 UI 和编辑器 CodeLens 元素允许用户轻松地运行给定函数、文件、包或工作区的测试、基准测试、配置文件。

或者,您可以通过一组命令来实现相同的功能

您可以在命令面板中键入“Go: test”来探索许多与测试相关的命令。

Test Commands

前三个命令可以使用 gotests 为当前包、文件或光标处的函数生成测试骨架。后几个命令可以使用 go test 在当前包、文件或光标处运行测试。还有一个命令可以获取测试覆盖率。

您可以配置扩展使用以下设置运行测试并计算测试覆盖率

  • go.testOnSave
  • go.coverOnSave
  • go.testFlags

导入包

此扩展默认情况下会整理导入并移除未使用的导入。如需更改默认行为,您可以按照这些说明,为每种语言分别覆盖默认设置。

运行命令Go: 添加导入以获取可导入到 Go 文件的包列表。选择其中一个包,它将被添加到 Go 文件的导入块中。

重构

选择要重构的区域(例如变量、函数体等)。点击选定区域中显示的代码操作灯泡图标,或从 VS Code 上下文菜单中选择重构...重命名符号 (F2)。

调试

Go 扩展允许您通过使用Delve 调试器来调试 Go 代码。

阅读在 VS Code 中调试 Go 程序以获取设置步骤、支持的功能、配置、有关远程调试的信息和故障排除指南。有关变量检查、设置断点和其他与语言无关的通用调试功能,请查看VS Code 调试

Go 扩展中一些独特的功能包括:

  • 本地和远程调试
  • 使用Delve 的表达式语法进行数据检查
  • 使用 DEBUG CONSOLE 中的dlv 命令进行动态配置更改和检查选项
  • 隐藏/显示系统 Goroutine 的能力(使用 hideSystemGoroutines 配置)
  • 反汇编视图支持(右键点击您的源代码并选择打开反汇编视图
  • 实验性的函数调用、核心检查、Mozilla rr 支持

后续步骤

以上是对 VS Code 中 Go 扩展功能的简要概述。如需了解更多信息,请查看 Go 扩展README中提供的详细信息。

要及时了解 Go 扩展的最新功能/错误修复,请查看CHANGELOG

如果您有任何问题或功能请求,请随时在 Go 扩展vscode-go 仓库中记录它们。

如果您想了解更多关于 VS Code 的信息,请尝试以下主题