GoLand 2026.1 Help

代码检查

在 GoLand 中,有一套代码检查可以在编译项目之前检测和纠正异常代码。 该 IDE 可以查找并高亮显示各种问题,定位无用代码,查找可能的错误、拼写问题,并改善整体代码结构。

检查可以扫描项目文件中的所有代码或仅扫描特定 作用域 (例如,仅在生产代码或修改过的文件中)。

每个检查都有一个 严重程度——问题对您的代码可能产生的影响程度。 编辑器中不同严重性的问题会以不同方式高亮显示,以便您能够快速区分关键问题和不太重要的事情。 GoLand 附带一组预定义的严重性级别,并允许您创建自己的级别。

检查及其设置被归类于 profiles中。 每个配置文件包含有关启用检查的信息、它们分析的文件作用域及其严重级别。

访问所有可用的检查及其设置

  • 设置 对话框 (Ctrl+Alt+S) 中,前往 编辑器 | 检查

    您也可以按 Ctrl+Alt+Shift+H 并在弹出窗口中选择 配置检查

    检查列表及其设置

请使用 筛选图标 筛选检查列表。 例如,您可以按严重性或语言筛选检测。

数据流分析

数据流分析(DFA)是一种用于编程的方法,用于理解数据如何在程序中流动。 将您的程序想象成一个带有不同点的地图,每个点都是代码的一部分(例如语句或指令)。 这些点通过线连接,显示程序运行时的路径。 在 GoLand 中,数据流分析查看此映射以分析您的代码。

DFA 检查及其设置的列表

nil 解引用的数据流分析

nil 指针解引用是 Go 中常见的错误。 它可能导致生产系统中出现意外的 panic、崩溃或死锁。 典型原因包括访问 nil 指针的字段或向 nil 通道写入数据。

GoLand 使用静态代码分析检测 nil 解引用问题。 标准的 nil 解引用检查在单个函数内工作(过程内分析),可捕获简单案例。

当 nil 值在函数、文件或包之间传递时,会出现更复杂的问题。 为捕获这些问题,GoLand 提供了过程间 DFA。 此功能会跟踪值如何通过函数调用传播,从而能够检测整个代码库中的潜在 nil 解引用问题。

有关过程内分析的详细信息,请参阅 blog.jetbrains.com 上的博文

解释潜在的 nil 解引用

GoLand 会在编辑器中直接标出可能存在的 nil 解引用问题。 出现此类警告时,您可以使用 解释潜在的nil 解引用 操作。

  • 将鼠标悬停在警告上,或点击警告并按 Alt+Enter ,然后选择 解释潜在的nil 解引用

    解释潜在的 nil 解引用

    此操作将在 数据流分析 工具窗口的 问题 选项卡中打开内容。 该工具会逐步解释 nil 值在代码中的传播过程以及其使用位置。 此功能可帮助您理解问题并高效修复,无需浏览整个代码库。

    在 GoLand 中解释潜在的 nil 解引用

在快速文档中查看 nil 性信息

GoLand 现在在快速文档弹窗中直接显示 nil 性信息。 此功能可帮助您快速查看函数是否可能返回 nil,或是否需要非 nil 参数或接收者。

  1. 将光标定位到代码中的函数、参数或接收者上。

  2. 按下 Ctrl+Q 键以触发快速文档弹窗。 在弹窗中查找 Nilability info 部分。

    快速文档中的 nil 性信息

资源泄露分析

资源泄露分析可帮助您识别已打开但未正确关闭的资源,如文件或网络连接。 在 Go 中,此类问题可能导致内存泄露、性能下降、隐蔽的 bug,以及系统资源耗尽,从而引发严重运行时错误。

在 GoLand 中,此检查会在本地分析您的代码,以在单个函数中发现潜在的资源泄露。 它会检测实现了 io.Closer 接口并从其他函数返回的资源。

资源泄露检查设置

分析原理

此检查会检查函数中的所有控制流路径,以确保资源得到正确关闭。 如果存在至少一条未关闭资源的路径,GoLand 将以警告形式标出此潜在资源泄露。

例如:

func processLogFile(filename string) error { file, err := os.Open(filename) // resource leak if err != nil { return err } info, err := file.Stat() if err != nil { return err // the file is not closed } if info.Size() == 0 { return fmt.Errorf("empty file") // the file is not closed } defer file.Close() _, _ = io.Copy(io.Discard, file) return nil }

此处的问题在于出现了文件未关闭的提前返回情况。

未显示警告时的情况

此检查旨在避免误报。 如果某个函数将资源的所有权转移出去(即该资源被传递至程序的其他部分并可能随后关闭),则不会显示警告。 在此类情况下,GoLand 认为资源已被正确处理。

以下情况不会显示警告:

  • 从当前函数返回

  • 用于匿名函数中

  • 赋值给全局变量

  • 存储在 struct、slice 或 map 中

例如,以下函数不会触发警告:

func createFile() io.Closer { f, _ := os.Open("/data/source.db") return f // ownership is transferred }

检测由重赋值导致的资源泄露

此检查还可以检测由重赋值引起的泄露。 例如:

func _() { f, _ := os.Open("/data/source.db") // resource leak! if true { f, _ = os.Open("/data/source.db") } f.Close() }

在此示例中,首次调用 openFile() 返回的资源未被关闭,因为变量 f 在调用 Close() 前被重新赋值。

使用 Qodana 进行代码检查

安装 Qodana 插件

此功能依赖于 Qodana插件,您需要安装并启用它。

  1. 按下 Ctrl+Alt+S 打开设置,然后选择 插件

  2. 打开 Marketplace 选项卡,找到 Qodana插件,然后点击 安装 (如果提示,请重启 IDE)。

除了在您的 IDE 中运行代码检查,您还可以使用 Qodana检查您的代码:

  • 在本地运行 GoLand 检查,包括在 IDE 中运行,并作为 CI/CD 流水线的一部分运行。

  • 使用您的 CI/CD 基础设施运行资源消耗型检查。

  • 在您的 CI 系统中通过质量门控强制执行质量标准。

  • 在 IDE 和 CI 工具中共享相同的检查配置文件。

  • 仅在 Qodana 中提供的访问检查,例如安全检查和许可证审计。

  • 访问检查结果的历史概览.

    您可以比较不同提交之间的检查结果,以更好地了解您的进度。

有关更多信息,请参阅 Qodana

Qodana 报告
2026年 3月 26日