启用与禁用检查
某些检查可能会报告您目前不希望看到的问题。 此时,您可以禁用或抑制它们。
禁用检查
当您 禁用检查时,即表示将其关闭。 这意味着代码分析引擎将停止在项目文件中查找此检查旨在检测的问题。 请注意,禁用检查会在当前检查配置文件中生效,但在其他配置文件中仍保持启用状态。
GoLand 中的大多数检查都可以禁用。 但是,某些检查将无视设置继续高亮显示代码。 例如,语法错误始终会被高亮显示。
在设置中禁用检查
按 Ctrl+Alt+S 打开设置,然后选择 。
找到要禁用的检查并取消其旁边的复选框。
应用更改并关闭对话框。
您可以使用上下文操作在编辑器中快速禁用已触发的检查。
通过编辑器禁用检查
将插入符号置于高亮行处,按 Alt+Enter (或单击
)以打开可用上下文操作列表。
单击要禁用的检查旁边的
,然后选择 禁用检查。
通过“问题”工具窗口禁用检查
在 检查结果 选项卡中的 问题 工具窗口中(运行代码分析后显示),右键单击要禁用的检查并选择 禁用检查。
单击工具栏上的
并选择 筛选已解决项 以隐藏禁用检查的警报。
抑制检查
当您 抑制检查时,代码分析引擎不会高亮显示此检查在特定代码段(类型、函数或行)中发现的问题。 您还可以抑制当前类型中的所有检查。
GoLand 中的大多数检查都可以抑制。 但是,某些检查不支持此选项。 例如,语法错误无论设置如何,在编辑器中始终会高亮显示。
通过编辑器抑制检查
将插入符号置于高亮行处,按 Alt+Enter (或单击
使用意图操作)。
单击要抑制的检查旁边的
按钮,并根据所需作用域选择操作。 GoLand 会在抑制检查的代码片段上方添加一条
// noinspection注释。您可以在 抑制性注释 表中找到检查及其标识符的列表。 例如,要抑制 导出元素的注释以不正确的名称开头 检查,请将
GoCommentStartInspection标识符与// noinspection注释一起使用。 完整注释为// noinspection GoCommentStartInspection。
通过“问题”工具窗口抑制检查
检查结果 选项卡中的 问题 工具窗口会显示在运行代码分析时检测到的问题。
在 检查结果 选项卡中的 问题 工具窗口中(运行代码分析后显示),右键单击要抑制的检查并选择所需的抑制操作。

启用已抑制的检查
抑制检查时,IDE 会在所选符号前添加 //noinspection 注解。 例如,若您对某个语句抑制检查,GoLand 将在该语句前添加注解。
若要重新启用已抑制的检查,请删除
//noinspection注解。
禁用高亮但保留修复
检查依据其 严重性 在编辑器中高亮显示代码问题。 您可以快速禁用检查的代码高亮,而无需打开设置。 在此情况下,检查保持启用并提供修复,但其严重性变为 无高亮显示(修复可用)。
将插入符号置于编辑器中由检查高亮显示的代码元素上,并按 Alt+Enter。
系统将显示一个包含可用修复及上下文操作的列表。 找到标有
的代码检查修复。点击修复旁边的
按钮以打开检查选项,并选择 禁用高亮显示,保留修正。

您正在更改严重性级别的检查名称显示在检查选项的上方。
如果您想恢复高亮显示,请按 Ctrl+Alt+S 打开 IDE 设置,并选择 。 在列表中找到所需的检查,并根据需要更改其严重性。 如需了解更多信息,请参阅 在所有作用域中更改检查严重级别。
更改文件的高亮级别
默认情况下,GoLand 会高亮显示所有检测到的代码问题。 将鼠标悬停在编辑器右上角的小部件上,并从 高亮显示 列表中选择其他级别:
无 :关闭高亮显示。
语法 :仅高亮显示语法问题。
所有问题 :(默认)高亮显示语法问题和检查发现的问题。
您也可以通过主菜单更改高亮显示级别。 选择或按 Ctrl+Alt+Shift+H。
抑制性注释
检查名称 | 与 noinspection 关键字配合使用的 ID |
|---|---|
未使用的常量 | GoUnusedConstInspection |
未使用的全局变量 | GoUnusedGlobalVariableInspection |
未使用的导出函数 | GoUnusedExportedFunctionInspection |
未使用的函数 | GoUnusedFunctionInspection |
未使用的参数 | GoUnusedParameterInspection |
未使用的类型参数 | GoUnusedTypeParameterInspection |
未使用的类型 | GoUnusedTypeInspection |
未使用的导出类型 | GoUnusedExportedTypeInspection |
已禁用 GOPATH 索引 | GoDisabledGopathIndexingInspection |
布尔条件 | GoBoolExpressionsInspection |
自我赋值 | GoSelfAssignmentInspection |
空声明 | GoEmptyDeclarationInspection |
切片中冗余的第二索引 | GoRedundantSecondIndexInSlicesInspection |
range 中冗余的空白参数 | GoRedundantBlankArgInRangeInspection |
复合字面量中的冗余类型 | GoRedundantTypeDeclInCompositeLit |
冗余的分号 | GoRedundantSemicolonInspection |
冗余的逗号 | GoRedundantCommaInspection |
冗余的类型转换 | GoRedundantConversionInspection |
冗余的导入别名 | GoRedundantImportAliasInspection |
可省略的类型 | GoVarAndConstTypeMayBeOmittedInspection |
使用字面量声明的空切片 | GoPreferNilSliceInspection |
导出元素的注释以错误的名称开头 | GoCommentStartInspection |
导出元素应具有自己的声明 | GoExportedOwnDeclarationInspection |
结构体初始化未使用字段名称 | GoStructInitializationWithoutFieldNamesInspection |
接收者使用了通用名称 | GoReceiverNamesInspection |
名称以包名开头 | GoNameStartsWithPackageNameInspection |
导入未排序 | GoUnsortedImportInspection |
错误字符串不能以大写字母开头或以标点符号结尾 | GoErrorStringFormatInspection |
注释前缺少空格 | GoCommentLeadingSpaceInspection |
使用 Snake_Case | GoSnakeCaseUsageInspection |
导出元素应包含注释 | GoExportedElementShouldHaveCommentInspection |
“time.Duration”的单位专用后缀 | GoUnitSpecificDurationSuffixInspection |
类型参数以小写字母声明 | GoTypeParameterInLowerCaseInspection |
for 循环条件中冗余的“true” | GoRedundantTrueInForConditionInspection |
使用保留字作为名称 | GoReservedWordUsedAsNameInspection |
循环变量被 func 字面量捕获 | GoLoopClosureInspection |
导入的包名称被用作名称标识符 | GoImportUsedAsNameInspection |
结构体标签格式错误 | GoVetStructTagInspection |
不可能的接口类型断言 | GoVetImpossibleInterfaceToInterfaceAssertionInspection |
对 'fmt.Printf' 和 'fmt.Println' 函数的使用不正确 | GoPrintFunctionsInspection |
变量遮蔽 | GoShadowedVarInspection |
除以零 | GoDivisionByZeroInspection |
'strings.Replace' 的 count 参数使用不当 | GoStringsReplaceCountInspection |
构建标签格式错误 | GoBuildTagInspection |
对 'sync/atomic' 包的使用不正确 | GoVetAtomicInspection |
锁错误地以值传递 | GoVetCopyLockInspection |
将 'uintptr' 无效地转换为 'unsafe.Pointer' | GoVetUnsafePointerInspection |
对 'errors.As' 函数的使用不正确 | GoErrorsAsInspection |
函数或方法调用结果未使用 | GoUnusedCallResultInspection |
未处理的错误 | GoUnhandledErrorResultInspection |
空值分析器 | GoNilnessInspection |
Defer/go 语句直接调用 'recover' 或 'panic' | GoDeferGoInspection |
常用函数名的非标准签名 | GoStandardMethodsInspection |
超出范围的移位表达式 | GoShiftInspection |
调用 'Unmarshal' 时参数不正确 | GoVetUnmarshalInspection |
整型到字符串类型的转换 | GoVetIntToStringConversionInspection |
'context.CancelFunc' 未被调用 | GoVetLostCancelInspection |
在非测试 goroutine 中调用 'FailNow' | GoVetFailNowInNotTestGoroutineInspection |
值接收器与指针接收器混用 | GoMixedReceiverTypesInspection |
对 'iota' 的不规范使用 | GoIrregularIotaInspection |
错误对象的直接比较 | GoDirectComparisonOfErrorsInspection |
对错误对象的类型断言在包装错误上失败 | GoTypeAssertionOnErrorsInspection |
'switch' 中缺失 'iota' 常量的 'case' 语句 | GoSwitchMissingCasesForIotaConstsInspection |
无限 'for' 循环 | GoInfiniteForInspection |
循环中的 'defer' | GoDeferInLoopInspection |
对接收器的赋值 | GoAssignmentToReceiverInspection |
不可达代码 | GoUnreachableCodeInspection |
已弃用的元素 | GoDeprecationInspection |
多余的括号 | GoRedundantParensInspection |
导出函数返回未导出类型 | GoExportedFuncWithUnexportedTypeInspection |
不必要的导出标识符 | GoUnnecessarilyExportedIdentifiersInspection |
测试函数名称格式错误 | GoTestNameInspection |
使用 context.TODO() | GoContextTodoInspection |
使用 'interface{}' 作为类型 | GoInterfaceToAnyInspection |
Fuzzing 从 Go 1.18 开始受支持 | GoFuzzingSupportInspection |
转换字符串字面量 | GoConvertStringLiteralsInspection |
指令注释中有前导空格 | GoLeadingWhitespaceInDirectiveCommentInspection |
复合字面量中换行符前缺失结尾逗号 | GoMissingTrailingCommaInspection |