

新闻资讯
技术学院Go注释规范要求单行注释//置于代码上方,禁用行尾注释;多行注释/ /仅用于包说明或调试,不可替代godoc;函数/结构体注释须用顶格//块且无空行;包注释须在doc.go中以// Package开头。
Go 社区普遍接受的实践是:单行注释 // 优先放在被注释代码的正上方,而非行尾。虽然语法允许 a := 1 // 初始化计数器 这种写法,但一旦逻辑变复杂(比如带条件、嵌套或长表达式),行尾注释会严重拉宽代码行、破坏对齐,也容易和后续修改脱节。
if true { ... } 或 return nil 这类显而易见的语句加行尾注释gofmt)不会调整行尾注释位置,但多人协作时极易因缩进不一致导致注释“漂移”到错误逻辑旁/* ... */ 在 Go 中有明确分工:它不是 godoc 的目标注释形式。Go 工具链(包括 go doc 和 VS Code 插件)默认只提取以 // 开头、紧贴声明上方的注释生成文档。用 /* */ 写函数说明,等于主动放弃自动生成文档的能力。
doc.go 中写包级说明;调试时临时注释掉一段逻辑func ServeHTTP(...) 加 /* 处理 HTTP 请求 */ —— 这段注释不会出现在 go doc net/http#ServeHTTP 输出里/* */ 无法嵌套,若内部已有 /*,再套一层会直接编译失败;而 // 无此限制,更安全// + godoc 格式,否则 IDE 不识别VS Code 的 Go 扩展、GoLand 的参数提示、go doc 命令,全部依赖「紧邻声明上方的连续 // 注释块」。这个块最好包含函数作用、参数含义、返回值说明,甚至示例(用 // Example: 开头会被 godoc 特殊处理)。
// Add 计算两个整数之和。
// 参数:
// a: 被加数
// b: 加数
// 返回值:
// int: 和
// Example:
// sum := Add(2, 3) // sum == 5
func Add(a, b int) int {
return a + b
}godoc 视为断开)/* 或漏了空行,VS Code 悬停时可能只显示“no documentation found”doc.go,且必须是 // 开头一个包只能有一个权威包注释,它应该解释包的用途、设计意图、典型用法,而不是罗列所有导出函数。Go 工具要求这个注释必须出现在 package xxx 声明的正上方,且推荐放在独立的 doc.go 文件中——这样避免业务文件被注释“撑大”,也方便统一维护。
// Package mathutil 提供基础数学工具函数。 // // 本包不依赖外部库,所有函数均为纯函数。 // 典型用法: // result := mathutil.Max(10, 20) package mathutil
// Package xxx 开头,否则 go doc 不识别为包级文档// 起始(不是 /* */).go 文件里都写了包注释,go doc 只取第一个遇到的,其余被忽略——容易造成信息不一致真正难的不是写注释,而是让注释和代码一起活下来:函数签名改了,参数名变了,注释里还写着旧名字;包重构拆分后,doc.go 忘记同步更新。这些地方没有语法报错,但会悄悄腐蚀团队的理解成本。