在Visual Studio Code中使用Go

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

Go扩展横幅

你可以从VS Code的Marketplace安装Go扩展。

观看"开始使用VS Code Go"以了解如何使用VS Code Go构建您的第一个Go应用程序。

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

智能感知

智能感知

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

语义语法高亮

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

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

自动补全

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

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

悬停信息

悬停在任何变量、函数或结构体上,将为您提供有关该项目的信息,如文档、签名等。

签名帮助

当你打开(调用函数时,弹窗会提供函数的签名帮助。当你继续输入参数时,提示(下划线)会移动到下一个参数。

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

代码导航

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

  • 转到定义 F12 - 转到类型定义的源代码。
  • 转到类型定义 - 转到定义符号的类型。
  • 查看定义 ⌥F12 (Windows Alt+F12, Linux Ctrl+Shift+F10) - 弹出一个包含类型定义的查看窗口。
  • 转到引用 ⇧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: Toggle Test File命令在Go文件及其测试实现之间来回导航。

构建和诊断

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

您可以使用go.lintOnSave设置添加额外的lint检查,并通过go.lintTool设置配置您选择的lint工具(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 的 测试界面 和编辑器 CodeLens 元素允许用户轻松地为给定的函数、文件、包或工作区运行测试、基准测试和性能分析。

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

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

测试命令

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

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

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

导入包

该扩展会组织导入,并默认移除未使用的导入。如需不同的行为,您可以按照这些说明覆盖每种语言的默认设置。

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

重构

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

调试

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

阅读在VS Code中调试Go程序以获取设置步骤、支持的功能、配置、远程调试信息和故障排除指南。对于一般调试功能,如检查变量、设置断点以及其他不依赖于语言的活动,请查看VS Code调试

Go语言的一些独特特性包括:

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

下一步

这是对VS Code中Go扩展功能的简要概述。更多信息,请参阅Go扩展README中提供的详细信息。

要了解Go扩展的最新功能/错误修复,请参阅CHANGELOG

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

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