代码检查
在 GoLand 中,有一套代码检查可以在编译项目之前检测和纠正异常代码。 该 IDE 可以查找并高亮显示各种问题,定位无用代码,查找可能的错误、拼写问题,并改善整体代码结构。
检查可以扫描项目文件中的所有代码或仅扫描特定 作用域 (例如,仅在生产代码或修改过的文件中)。
每个检查都有一个 严重程度——问题对您的代码可能产生的影响程度。 编辑器中不同严重性的问题会以不同方式高亮显示,以便您能够快速区分关键问题和不太重要的事情。 GoLand 附带一组预定义的严重性级别,并允许您创建自己的级别。
检查及其设置被归类于 profiles中。 每个配置文件包含有关启用检查的信息、它们分析的文件作用域及其严重级别。
访问所有可用的检查及其设置
在 设置 对话框 (Ctrl+Alt+S) 中,前往 。
您也可以按 Ctrl+Alt+Shift+H 并在弹出窗口中选择 配置检查。

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

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,或是否需要非 nil 参数或接收者。
将光标定位到代码中的函数、参数或接收者上。
按下 Ctrl+Q 键以触发快速文档弹窗。 在弹窗中查找 Nilability info 部分。

资源泄露分析
资源泄露分析可帮助您识别已打开但未正确关闭的资源,如文件或网络连接。 在 Go 中,此类问题可能导致内存泄露、性能下降、隐蔽的 bug,以及系统资源耗尽,从而引发严重运行时错误。
在 GoLand 中,此检查会在本地分析您的代码,以在单个函数中发现潜在的资源泄露。 它会检测实现了 io.Closer 接口并从其他函数返回的资源。

分析原理
此检查会检查函数中的所有控制流路径,以确保资源得到正确关闭。 如果存在至少一条未关闭资源的路径,GoLand 将以警告形式标出此潜在资源泄露。
例如:
此处的问题在于出现了文件未关闭的提前返回情况。
未显示警告时的情况
此检查旨在避免误报。 如果某个函数将资源的所有权转移出去(即该资源被传递至程序的其他部分并可能随后关闭),则不会显示警告。 在此类情况下,GoLand 认为资源已被正确处理。
以下情况不会显示警告:
从当前函数返回
用于匿名函数中
赋值给全局变量
存储在 struct、slice 或 map 中
例如,以下函数不会触发警告:
检测由重赋值导致的资源泄露
此检查还可以检测由重赋值引起的泄露。 例如:
在此示例中,首次调用 openFile() 返回的资源未被关闭,因为变量 f 在调用 Close() 前被重新赋值。
使用 Qodana 进行代码检查
安装 Qodana 插件
此功能依赖于 Qodana插件,您需要安装并启用它。
按下 Ctrl+Alt+S 打开设置,然后选择 。
打开 Marketplace 选项卡,找到 Qodana插件,然后点击 安装 (如果提示,请重启 IDE)。
除了在您的 IDE 中运行代码检查,您还可以使用 Qodana检查您的代码:
在本地运行 GoLand 检查,包括在 IDE 中运行,并作为 CI/CD 流水线的一部分运行。
使用您的 CI/CD 基础设施运行资源消耗型检查。
在您的 CI 系统中通过质量门控强制执行质量标准。
在 IDE 和 CI 工具中共享相同的检查配置文件。
仅在 Qodana 中提供的访问检查,例如安全检查和许可证审计。
访问检查结果的历史概览.
您可以比较不同提交之间的检查结果,以更好地了解您的进度。
有关更多信息,请参阅 Qodana。
