【问题标题】:Remove a field from a struct, transform a struct从结构中删除一个字段,转换一个结构
【发布时间】:2021-03-27 11:42:02
【问题描述】:

从 Google Drive API 我得到一个结构 type File。该结构与我要插入 BigQuery 的结构几乎相同。

File 结构包含与 BigQuery 不兼容的“AppProperties”字段:

AppProperties map[string]string `json:"appProperties,omitempty"`

所以我想要的最终结果是相同的结构,删除了 AppProperties 字段。所以基本上问题是“如何从结构中删除一个字段”,但这没有意义,因为结构值是可变的,但结构字段不是。至少我现在是这么理解的。

我能想到的唯一解决方案是,复制 File 结构定义并省略 AppProperties 字段并将所有字段值移过来。

在 Go 中执行此操作的正确方法是什么?

【问题讨论】:

  • 如果您的问题与 MarshalJSON 的处理有关,您可以复制保存结构的变量并将其设置为 nil,而不是重新定义,并将其设置为 AppProperties
  • 谢谢约翰。您的意思是将其转换为 JSON 并返回到结构?在这种情况下,我仍然需要定义自己的结构,而不需要 AppPropereties 字段。这会起作用,但感觉只是删除一个字段需要付出很多努力。
  • 我的意思是,如果您只想将其插入 BigQuery,并将其作为 JSON 插入,假设您不想回读,我描述的方法应该适用于该用例。否则是的,很可能是不同的结构,因为它们(从概念上)应该是不同的类型。
  • 啊,我明白了。是的,这是有道理的,将 JSON 写入 BigQuery 是可行的。关于不同的结构体,除了在一个结构体中嵌入另一个结构体之外,有没有可以重用另一个结构体的部分?我可以复制粘贴文件结构
  • 是的,除了嵌入之外,据我所知,没有办法复制结构定义。

标签: go


【解决方案1】:

唯一的方法是复制结构并为您省略不必要的字段,这很乏味但没有其他方法......

【讨论】:

    猜你喜欢
    • 2011-03-01
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 2023-03-16
    • 2015-02-13
    • 2011-05-07
    相关资源
    最近更新 更多