如果一个字段在 Go 中被“过滤”,这意味着什么?

在 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 大写以区分导出的和未导出的字段,所以这一点很清楚。但是,包含“过滤”字段是什么意思(例如在上面评论的上下文中)?


交互式爱情
浏览 178回答 1
1回答

慕桂英3389331

该注释&nbsp;是由go/printer代码根据传递给它的 AST 生成的。一些 AST 节点有一个字段将它们标记为不完整,打印机使用该字段来决定是否打印该注释。然而,打印机无法知道该字段设置为 true 或 false 的规则和原因,因此按照惯例,它被认为是由过滤器完成的,最常见的过滤器是exportFilter,因此是语言。该Incomplete字段已导出,并且可以由任何有权访问 AST 的对象设置为 true/false。您可以自己遍历 AST,将每个 Incomplete 字段设置为 true,同时保持节点完好无损,然后将 AST 传递给打印机,然后打印机将生成包含所有字段、导出和未导出以及该注释的结构。Godoc过滤AST,ast.FileExports默认情况下只删除未导出的节点,然后将AST 传递给打印机。因此,在 Godoc 的情况下,该评论中的“过滤”与“未导出”同义。用于说明打印机行为的Playground 链接。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go