【问题标题】:Does whether or not a field is exported inside an anonymous struct make any difference?字段是否在匿名结构中导出有什么区别吗?
【发布时间】:2019-12-31 01:39:37
【问题描述】:

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

【问题讨论】:

  • 为什么我被否决了?

标签: go anonymous-struct


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 2012-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多