GoLand 2026.2 Help

分析代码以进行语法更新。

语法更新帮助您将 Go 代码迁移到新版本的语言。 当有新的 Go 版本可用时,GoLand 会分析您的代码并建议使用现代语言和标准库特性的更新。

语法更新作为检查项实现。 每个检查都会报告特定的过时结构,并提供一个快速修复,将代码重写为新的形式。 这些修复设计为安全且保持行为一致,因此您可以单独或批量应用它们。

您可以利用语法更新对现有代码库进行现代化,并保持与最新 Go 语言演进同步。

应用语法更新

当有语法更新可用时,GoLand 会在编辑器中高亮显示受影响的代码。 您可以借助意图操作菜单应用修复,也可以在更大的范围内运行检查,一次性更新多个文件。

默认情况下,这些更新会用蓝色下划线高亮,并用语言更新图标(语法更新图标 )标记。

使用快速修复应用语法更新

  1. 将文本光标置于您想要修改的代码元素处。 然后点击灯泡图标(或按 Alt+Enter )打开建议列表。

    意图预览自动打开。 如果一个意图很复杂且无法生成预览,您将看到意图描述。 在建议列表上悬停查看可用意图的预览。

  2. 按下 Enter 或点击列表中的意图以应用它。

    有关快速修复的更多信息,请参阅 意图操作。

    语法更新示例

语法更新使用名为 语法更新 的专用检查严重级别。 您可以像配置其他检查一样在设置中配置该级别。

更改语法更新的严重级别

  1. 按下 Ctrl+Alt+S 打开设置,然后选择 编辑器|检查。

  2. 请导航至 Go | 语法更新。

  3. 从列表中选择一个检查。

  4. 从 严重性 列表中选择一个新的严重级别。

  5. 从 编辑器中高亮显示 列表中,选择您想在编辑器中用来突出显示代码片段的样式。

  6. 应用更改并关闭对话框。

    修改后的检查现在将在选定的配置文件中具有新的严重级别。

    有关检查的更多信息,请参阅 代码检查。

    更改语法更新的严重级别

应用快速修复后,GoLand 会建议您分析代码以查找其他可以应用语法更新的位置。

分析代码以查找其他语法更新

  1. 点击 分析代码以进行语法更新。

  2. 在 指定语法更新范围 对话框中,选择作用域并点击 分析。

    分析代码以查找其他语法更新

或者,您可以从 go.mod 运行语法更新的代码分析。

从 go.mod 运行分析

  • 在 go.mod 中,点击 分析代码以进行语法更新。 点击 显示 Go 的高亮内容 查看新语言的概览。

    从 go.mod 运行分析

您可以对单个出现位置应用快速修复,也可以一次性应用所有可用修复。

应用语法更新快速修复

  • 要对特定出现位置应用修复,请打开 问题 工具窗口,选择该出现位置并点击 应用修正。

    应用语法更新快速修复
  • 要批量应用修复,请打开 问题 工具窗口,在 语法更新 节点下右键点击某个分组,并选择可用的快速修复。 您也可以为该分组点击 应用修正 按钮。

Go 1.26 中支持的语法更新

Go 1.26 引入了多项语言和 API 改进。 GoLand 提供专用的检查,帮助您自动应用这些更改。

使用 new(expr) 创建指针

Go 1.26 扩展了 new 内置函数,使其不仅能接受类型名,还能接受表达式。 这样您可以直接通过表达式创建指针,无需引入临时变量。

此更改还消除了仅为创建指针而存在的辅助函数(如 proto.Int64()、 proto.String() 或 proto.Bool() )的需要。

之前:

birthDate := time.Date(1986, 10, 1, 0, 0, 0, 0, time.UTC) activeVal := true ageVal := calculateAge(birthDate) return UserProfile{ ID: 101, Username: "Gopher", IsActive: &activeVal, Age: &ageVal, }

之后:

birthDate := time.Date(1986, 10, 1, 0, 0, 0, 0, time.UTC) return UserProfile{ ID: 101, Username: "Gopher", IsActive: new(true), Age: new(calculateAge(birthDate)), }

GoLand 提供 使用 new() 创建指针检查。 它会检测仅为取地址而创建临时变量的情况,并建议 替换为 new() 快速修复。

使用 errors.AsType 类型安全地解包错误

Go 1.26 引入了 errors.AsType ,这是 errors.As 的泛型类型安全替代方案。

errors.As 函数需手动处理指针,若目标类型不正确会导致 panic。

有问题的用法:

var cfgErr ConfigError // value, not pointer if errors.As(err, &cfgErr) { // panic fmt.Println("Config error on field:", cfgErr.Field) }

errors.AsType 能自动推断目标类型并返回带类型的结果。 它无需依赖调用者准备的指针,并且不会因目标类型不匹配而产生 panic。

使用 errors.AsType:

if cfgErr, ok := errors.AsType[*ConfigError](err); ok { fmt.Println("Config error on field:", cfgErr.Field) }

GoLand 提供 使用 errors.AsType 类型安全地解包错误检查。 它会报告可以替换的 errors.As 用法并提供 替换为 errors.AsType. 快速修复。

2026年 7月 14日