dongyou8701 2015-01-16 22:51
浏览 17
已采纳

类型声明中的匿名字段?

I came across this type declaration:

type Handler func(*Conn)

type Server struct {
  Handshake func(*Config, *http.Request) error
  Handler
}

(this is a simplified version of https://github.com/golang/net/blob/38c17adf51120973d1735785a7c02f8ce8297c5e/websocket/server.go#L55-L66

The second field in the Server structure is anonymous. There is just type and no name.

Here is the grammar for type declarations (https://golang.org/ref/spec#Type_declarations):

TypeDecl     = "type" ( TypeSpec | "(" { TypeSpec ";" } ")" ) .
TypeSpec     = identifier Type .

and it clearly requires an identifier name. But yet the section that I referenced that contains the grammar, also mentions anonymous fields.

I do not understand why this syntax is correct and how anonymous fields are used.

  • 写回答

1条回答 默认 最新

  • dsriya5471 2015-01-16 23:04
    关注

    You want to look at the part of the grammar that has to do with structures, not just types. See: Struct types and the use of AnonymousField. Looking just at the production for TypeSpec is focusing attention on the wrong place. Instead, look at FieldDecl; the grammar shows that we have two possibilities: named fields (IdentifierList Type), or anonymous fields (AnonymousField).

    Anonymous fields are typically used for embedding. In your example, a Server will act like a Handler because it has embedded that field.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题