Go结构体匿名字段的可见性:公有还是私有?
Go语言匿名字段的可见性判定
Go语言里,匿名字段的公有/私有属性,由它对应的类型本身的可见性决定——因为匿名字段没有显式名称,就直接看它的类型是否能被外部包访问,逻辑和普通字段看名字大小写本质一致。
拿你给出的例子来说:
type myType struct { string }
这里的匿名字段是内置的string类型,所有Go内置类型都是公开可见的,所以这个匿名字段属于公有字段,外部包可以直接通过myType的实例访问它,比如直接读取字段值或调用对应类型的方法。
再举个私有匿名字段的例子:
// 当前包内定义的私有类型(小写开头) type privateStruct struct { num int } type myType struct { privateStruct // 这个匿名字段是私有的 }
因为privateStruct是当前包私有的类型,所以作为匿名字段时,外部包无法直接访问它,只能在当前包内操作。
简单总结:
- 当匿名字段的类型是公开类型(大写开头的自定义类型、所有内置类型),该匿名字段就是公有的
- 当匿名字段的类型是私有类型(小写开头的自定义类型),该匿名字段就是私有的
内容的提问来源于stack exchange,提问作者SOS
相关产品推荐
相关产品推荐

