-3

在 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",
}
4

2 回答 2

4

当然可以,由于反思。尝试json.Marshal(test)在您的每个声明之后致电。在第一种情况下,你会得到{"FieldOne":"some string","FieldTwo":"some other string"},但在第二种情况下,你会得到{}。这是因为 JSON 封送拆收器仅“看到”导出的结构字段。更一般地说,即使 的类型test没有名称,也不意味着该类型本身是不可访问的;任何带有反射的东西都可以访问它。

于 2019-08-26T21:31:38.730 回答
3

在 golang 中导出(或不导出)匿名结构中的字段有什么不同吗?

当然,所有通常的规则都适用(json.Marshal例如,如果您尝试将 struct 提供给 ,您会看到不同之处)。

于 2019-08-26T21:29:58.713 回答