Go 中如何控制包文档的显示顺序?
数据小许
建议将整个包的文档注释集中写在一个文件中。可以使用已有的 pkg1.go;如果文档较长,或希望文档入口更容易找到,用 doc.go 更合适。无需为了排序创建 0.go。
为什么 a.go 中的内容会排在前面?
标准库 go/doc 的实现会先按文件名排序,再读取各文件。遇到多个包文档注释时,它会依次拼接这些注释。因此,a.go 中的包文档会出现在 pkg1.go 的包文档之前。这个顺序由文档提取工具的实现决定,与文件的创建或修改时间无关。go/doc 源码
多个文件中的包文档会合并,但仅在 a.go 中添加函数、类型或普通注释,并不会让它们自动成为包概览。Go 的文档指南建议,多文件包只在一个源文件中保留包文档注释。Go Doc Comments
应该使用 pkg1.go 还是 doc.go?
两种方式都可以,根据文档的规模和组织需要选择:
- 如果包说明较短,且
pkg1.go适合作为主要文件,可以直接写在其中。 - 如果包说明较长,或需要介绍整体用法,可以集中写在
doc.go。这个文件可以只包含包文档注释和package声明,这也是 Go 项目中已有的文档惯例。Go 官方文档介绍
doc.go 这个文件名本身不会获得特殊的排序优先级。集中保留一份包文档后,就不需要通过文件名控制不同文档片段的顺序。
如何整理现有文档?
- 将
a.go、b.go和pkg1.go中用于包概览的内容合并。 - 按希望读者阅读的顺序,写入
pkg1.go或新建的doc.go。 - 删除其他文件中重复的包文档注释,保留各函数、类型等声明自身的文档。
例如,doc.go 可以写成:
// Package pkg1 does something.
//
// 在这里补充包的整体说明,并按阅读顺序组织各段内容。
package pkg1
包文档注释应紧贴 package pkg1,中间不要插入空白行;需要分段时,使用示例中的空注释行 //。Go Doc Comments
整理后,在 pkg1 所在目录运行:
go doc
检查包说明是否完整、段落顺序是否符合预期。如果最终发布到其他文档平台,还应查看该平台的实际渲染结果。
为什么不建议使用 0.go?
在上述按文件名排序的实现中,0.go 会排在示例中的其他文件之前,但这仍然依靠文件名安排内容。以后添加其他包文档时,还需要维护它们之间的顺序。
此外,完全空白的 0.go 无法承载包文档;作为 Go 源文件,它仍需包含 package pkg1 声明。使用常见的 doc.go 命名并集中维护包说明,更容易让维护者找到文档入口。
备注:内容仅供参考。
