是否在匿名结构中导出字段有什么区别吗?
Does whether or not a field is exported inside an anonymous struct make any difference?
在 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",
}
Does exporting (or not exporting) a field in an anonymous struct in golang make any difference?
当然,所有常用规则都适用(例如,如果您尝试将结构提供给 json.Marshal
,您会看到不同之处)。
确实如此,由于反思。尝试在每个声明之后调用 json.Marshal(test)
。在第一种情况下,您将获得 {"FieldOne":"some string","FieldTwo":"some other string"}
,但在第二种情况下,您将获得 {}
。那是因为 JSON 封送拆收器仅 "sees" 导出结构字段。更一般地说,即使 test
的类型没有名称,并不意味着该类型本身不可访问;它任何有反射的东西都可以访问。
在 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",
}
Does exporting (or not exporting) a field in an anonymous struct in golang make any difference?
当然,所有常用规则都适用(例如,如果您尝试将结构提供给 json.Marshal
,您会看到不同之处)。
确实如此,由于反思。尝试在每个声明之后调用 json.Marshal(test)
。在第一种情况下,您将获得 {"FieldOne":"some string","FieldTwo":"some other string"}
,但在第二种情况下,您将获得 {}
。那是因为 JSON 封送拆收器仅 "sees" 导出结构字段。更一般地说,即使 test
的类型没有名称,并不意味着该类型本身不可访问;它任何有反射的东西都可以访问。