【发布时间】: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