
Go 中导出的常量(首字母大写)必须附带单行或块级注释,否则 golint 会报错;正确注释后即可正常通过 import 在其他包中使用(如 log.FATAL)。
go 中导出的常量(首字母大写)必须附带单行或块级注释,否则 golint 会报错;正确注释后即可正常通过 `import` 在其他包中使用(如 `log.fatal`)。
在 Go 语言中,所有以大写字母开头的标识符(如 FATAL、ERROR、DEBUG)均被视为导出(exported)成员,可被其他包访问。但根据 Go 工具链规范(尤其是 golint,现已被 revive 等工具逐步替代,但其注释规则仍被广泛遵循),每个导出的顶层常量、变量、函数、类型都必须有清晰的文档注释——即紧邻其声明前的 // 单行注释或 /* */ 块注释,且该注释需能准确说明其用途。
你原始代码的问题在于:
- FATAL、ERROR、DEBUG 是导出常量(大写开头);
- 它们位于 const 块内,但注释 // fatal errors 等仅属于单个常量,未覆盖整个块;
- 结尾的 // const for logging levels 是块后注释,不被 golint 识别为有效文档注释(Go 文档注释必须位于声明之前)。
✅ 正确做法:将说明性注释置于 const 关键字正上方,采用 // 单行风格(推荐)或 /* */ 块注释,并确保语义明确:
// LogLevel represents the severity level of a log message.
// Values increase in severity: Debug < Info < Error < Fatal.
const (
Debug = iota // Debug level: fine-grained informational events
Info // Info level: general operational entries
Warn // Warn level: potential issues requiring attention
Error // Error level: errors that prevent functionality
Fatal // Fatal level: critical failures causing program termination
)⚠️ 注意事项:
- 不要使用 iota 重复赋值(如 ERROR = iota),这会导致值重置,破坏序列逻辑;应让 iota 自然递增;
- 若常量组语义统一(如日志级别),优先用块级顶部注释概括整体用途,再为每个常量补充简短说明(增强可读性与 IDE 提示效果);
- 注释内容应描述“是什么”和“何时用”,而非实现细节(如避免写 // equals 0);
- 使用 go doc 或 VS Code 悬停时,顶部注释会作为包文档显示,因此务必保持专业、准确、简洁。
最终,修正后的常量可被其他包安全引用:
import "yourmodule/log" level := log.Fatal // ✅ 无 lint 报错,且可正常使用
遵循此规范,既满足静态检查要求,也显著提升代码的可维护性与协作效率。

















