Go Doc 意外缩进/分组函数的原因排查
Go Doc 自动缩进分组 Parse 函数的排查方案
关键原因:Go Doc 靠函数接收者的类型关联自动分组
Go Doc 本身会根据函数接收者的类型关系自动分组,尤其是当接收者类型和另一个类型存在嵌套、别名关联时,会把相关函数缩进显示到关联类型的文档下面——你没主动设置,大概率是代码里的类型定义藏了这种关联。
一步步排查:
对比两个文件的函数接收者类型
打开cloudwind_block.go和blocks.go,查看四个 Parse 函数的接收者。比如如果cloudwind_block.go里的 Parse 接收者是*CloudwindBlock,而这个类型嵌套了Status结构体(或是Status的类型别名),Go Doc 就会把这些函数归到Status的文档下,显示成缩进效果。blocks.go没这个问题,肯定是它的接收者类型没和其他类型有这类关联。检查类型定义的嵌套/别名关系
重点看cloudwind_block.go里的类型:- 有没有直接嵌入
Status:type CloudwindBlock struct { Status // 这种嵌入会让Go Doc把CloudwindBlock的函数和Status关联 // 其他字段 } - 有没有把
CloudwindBlock定义成Status的类型别名:type CloudwindBlock Status // 别名关联也会触发分组
这两种情况都会让 Go Doc 自动把对应函数缩进显示在
Status的文档下。- 有没有直接嵌入
再确认注释(虽然你调过,但不妨再检查)
确保Status的注释和 Parse 函数的注释里没有用特殊的文档标记,不过这种情况很少,主要还是类型关联的问题。
解决办法:
- 如果不需要这种关联,直接改类型定义:把嵌入字段改成普通字段(比如
Status Status),或者取消类型别名; - 如果是故意嵌套但不想显示缩进,只能调整类型结构,把关联断开;
- 照着
blocks.go的类型定义改cloudwind_block.go,对齐结构后问题应该就消失了。
内容的提问来源于stack exchange,提问作者Mehmet Karatay
相关产品推荐
相关产品推荐

