在 Go 文档中,类型通常只显示导出的字段。例如,time.Timer 文档(https://golang.org/pkg/time/#Timer)显示如下:类型定时器Timer 类型表示单个事件。当 Timer 到期时,将在 C 上发送当前时间,除非 Timer 是由 AfterFunc 创建的。必须使用 NewTimer 或 AfterFunc 创建 Timer。type Timer struct { C <-chan Time // contains filtered or unexported fields}Go 大写以区分导出的和未导出的字段,所以这一点很清楚。但是,包含“过滤”字段是什么意思(例如在上面评论的上下文中)?
1 回答

慕桂英3389331
TA贡献2036条经验 获得超8个赞
该注释 是由go/printer
代码根据传递给它的 AST 生成的。一些 AST 节点有一个字段将它们标记为不完整,打印机使用该字段来决定是否打印该注释。然而,打印机无法知道该字段设置为 true 或 false 的规则和原因,因此按照惯例,它被认为是由过滤器完成的,最常见的过滤器是exportFilter
,因此是语言。
该Incomplete
字段已导出,并且可以由任何有权访问 AST 的对象设置为 true/false。您可以自己遍历 AST,将每个 Incomplete 字段设置为 true,同时保持节点完好无损,然后将 AST 传递给打印机,然后打印机将生成包含所有字段、导出和未导出以及该注释的结构。
Godoc过滤AST,ast.FileExports
默认情况下只删除未导出的节点,然后将AST 传递给打印机。因此,在 Godoc 的情况下,该评论中的“过滤”与“未导出”同义。
用于说明打印机行为的Playground 链接。
- 1 回答
- 0 关注
- 177 浏览
添加回答
举报
0/150
提交
取消