【问题标题】:Golang unset Struct FieldGolang 未设置结构字段
【发布时间】:2018-12-25 00:31:24
【问题描述】:

在 Golang 中,我在 Struct 下面有三个字段

type Person struct {
   name string
   age  int
   rank int
}

对于处理,我需要一个排名字段,但对于输出,我想从结构中排除排名字段,因为我直接将结构上方传递给 JSON 编码器以引发响应。

有什么方法可以取消 Struct 中的排名字段吗?

【问题讨论】:

  • 只需添加一个字段标签json:"-"。请注意,只要不导出字段,encoding/json 就不会解析这个结构整体

标签: json go struct marshalling


【解决方案1】:

要取消设置字段,请将其分配为零值,例如:

var p Person
p.rank = 0

也知道如果要使用Person处理JSON,必须导出字段,未导出的字段不会被encoding/json包处理,所以将Person改为:

type Person struct {
    Name string
    Age  int
    rank int
}

仅此一项将使 rank 被遗漏在 JSON 处理中,因为它未导出。

如果您还需要导出rank 字段,则使用json:"-" 标记值从JSON 处理中排除导出的字段:

type Person struct {
    Name string
    Age  int
    Rank int `json:"-"`
}

【讨论】:

  • 似乎,任何类型(不仅仅是 int)字段的可靠方法是 p.rank=new(Person).rank
  • @Uvelichitel 但与需要的相比,这可能真的效率低下。
  • @Uvelichitel 如果您的目标是消耗资源,您也可以通过反思来做到这一点。 Go 是一种类型安全的语言,您在编写代码时就知道每个字段的类型是什么,没有理由在运行时使用额外的代码来找出零值。
猜你喜欢
  • 2022-12-19
  • 2016-07-11
  • 2017-12-26
  • 2011-11-28
  • 1970-01-01
  • 2015-06-11
  • 1970-01-01
  • 2017-05-31
  • 1970-01-01
相关资源
最近更新 更多