Go 结构匿名字段是公共的还是私有的?

Mic*_*ang 4 struct go

众所周知,以大写字母开头的字段是公共字段,非大写字母开头的字段是私有字段。但Golang也支持匿名字段。例如:

type myType struct {
  string
}
Run Code Online (Sandbox Code Playgroud)

这些字段是为Embedding设计的。但这个领域是公共的还是私有的?

小智 5

根据结构类型规范:

使用类型声明但没有显式字段名称的字段称为嵌入字段。嵌入字段必须指定为类型名称 T 或指向非接口类型名称 *T 的指针,并且 T 本身可能不是指针类型。非限定类型名称充当字段名称。

不合格名称stringstring

根据导出标识符的规范:

可以导出标识符以允许从另一个包访问它。如果满足以下条件,则导出标识符:

  1. 标识符名称的第一个字符是 Unicode 大写字母(Unicode 字符类别 Lu);和
  2. 标识符在包块中声明,或者是字段名称或方法名称。

的第一个字符string不是 Unicode 大写字母。

由此可见,嵌入字段不会被导出。换句话说,它是包私有的。