在 Go 文档中,一个类型通常只显示导出的字段。例如,time.Timer 文档 ( https://golang.org/pkg/time/#Timer ) 显示以下内容:
类型定时器
Timer 类型表示单个事件。当 Timer 到期时,当前时间将在 C 上发送,除非 Timer 是由 AfterFunc 创建的。必须使用 NewTimer 或 AfterFunc 创建计时器。
type Timer struct {
C <-chan Time
// contains filtered or unexported fields
}
Run Code Online (Sandbox Code Playgroud)
Go 首字母化以区分导出和未导出的字段,所以这很清楚。但是,包含“过滤”字段是什么意思(例如在上述评论的上下文中)?
该注释
是由go/printer基于传递给它的 AST的代码生成的。一些 AST 节点有一个字段将它们标记为不完整,打印机使用该字段来决定是否打印该注释。然而,打印机无法知道为什么该字段被设置为 true 或 false 的规则和原因,因此按照惯例,它假定它是由过滤器完成的,最常见的是exportFilter,因此是语言。
该Incomplete字段被导出,并且可以被任何有权访问 AST 的人设置为 true/false。您可以自己遍历 AST,将每个 Incomplete 字段设置为 true,同时保持节点完好无损,然后将 AST 传递给打印机,打印机将生成带有所有字段的结构,导出和未导出,以及该注释。
Godoc过滤AST,ast.FileExports默认情况下仅删除未导出的节点,然后将AST传递给打印机。因此,在 Godoc 的情况下,该评论中的“过滤”与“未导出”同义。
用于说明打印机行为的Playground 链接。