Go 是否在匿名结构中导出字段会有任何区别吗?
导出(或不导出)golang中匿名结构中的字段会有什么不同吗?换句话说,以下两段代码是否有任何不同?考虑到它是一个匿名结构,您不能在变量本身之外使用该结构,因此我假设大写字母F在编译时没有任何区别(没有编译速度或运行时内存差异) 第1区:Go 是否在匿名结构中导出字段会有任何区别吗?,go,anonymous-struct,Go,Anonymous Struct,导出(或不导出)golang中匿名结构中的字段会有什么不同吗?换句话说,以下两段代码是否有任何不同?考虑到它是一个匿名结构,您不能在变量本身之外使用该结构,因此我假设大写字母F在编译时没有任何区别(没有编译速度或运行时内存差异) 第1区: var test = struct { FieldOne string FieldTwo string } { FieldOne: "some string", FieldTwo: "some other string", } 第2区
var test = struct {
FieldOne string
FieldTwo string
} {
FieldOne: "some string",
FieldTwo: "some other string",
}
第2区:
var test = struct {
fieldOne string
fieldTwo string
} {
fieldOne: "some string",
fieldTwo: "some other string",
}
导出(或不导出)golang中匿名结构中的字段会有什么不同吗
当然,所有的常规规则都适用(例如,如果您尝试将结构提供给
json.Marshal
,您会看到不同之处)。当然适用,因为反射。尝试在每次声明之后调用json.Marshal(test)
。在第一种情况下,您将得到{“FieldOne”:“some string”,“FieldTwo”:“some other string”}
,但在第二种情况下,您将得到{}
。这是因为JSON封送处理程序只“看到”导出的结构字段。更一般地说,即使test
的类型没有名称,也不意味着该类型本身是不可访问的;任何有反射的东西都可以访问它。为什么我被否决了?