
在 Go 语言中,所有首字母大写的导出标识符(如 FATAL)必须附带非空的顶层注释,否则 golint(及现代替代工具如 revive 或 staticcheck)会报错;正确做法是在常量块上方添加简洁、描述性的文档注释。
在 go 语言中,所有首字母大写的导出标识符(如 `fatal`)必须附带非空的顶层注释,否则 `golint`(及现代替代工具如 `revive` 或 `staticcheck`)会报错;正确做法是在常量块上方添加简洁、描述性的文档注释。
Go 的代码风格规范(由 golint 及其继任者如 revive 强制执行)要求:所有导出(public)的常量、变量、函数、类型等,都必须配有以 // 开头的、紧邻其声明前的文档注释。该注释需描述其用途,不能为空或仅含空格,也不能放在常量块内部或末尾。
你原始代码的问题在于:
- FATAL、ERROR、DEBUG 均为导出常量(首字母大写);
- 注释 // fatal errors 等被写在行内,属于“非顶层注释”,不被识别为文档注释;
- 常量块末尾的 // const for logging levels 位置错误(应在 const ( 之前),且未紧邻声明块。
✅ 正确写法如下(推荐语义清晰、符合标准命名惯例):
// LogLevel 表示日志级别,值越小优先级越低(Debug <p>⚠️ 注意事项:</p>
- 注释必须位于 const ( 关键字正上方,且中间不能有空行;
- 每个常量若语义差异较大,建议为其单独添加行内注释(如上所示),增强可读性;
- 避免使用 iota 的重复赋值(如原代码中多次 = iota),这会导致值重置,逻辑错误;应统一用 iota 自增;
- 常量名建议采用 CamelCase 风格(如 Debug 而非 DEBUG),更符合 Go 社区惯例(参见 Effective Go);
- 若常量仅在包内使用,请改为小写(如 debug),即可自动变为未导出,无需注释——但此时外部无法通过 log.Debug 访问。
? 小技巧:使用 go doc log 或 go doc log.Debug 可验证注释是否被正确识别——只有符合规范的顶层注释才会出现在生成的文档中。
遵循此规范,不仅可消除 linter 报错,更能提升代码可维护性与 API 可用性,是 Go 工程实践的重要基础。











