为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
交互式爱情 2022-05-23 15:47:33
在 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 链接。


查看完整回答
反对 回复 2022-05-23
  • 1 回答
  • 0 关注
  • 177 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号