将结构转储到提供的csv文件中的惯用golang方法是什么?我在一个func里面,我的struct作为接口{}传递:
func decode_and_csv(my_response *http.Response, my_struct interface{})
为什么接口{}? - 从JSON读取数据并且可能会返回一些不同的结构,因此尝试编写足够通用的函数。
我的类型的一个例子:
type Location []struct {
Name string `json: "Name"`
Region string `json: "Region"`
Type string `json: "Type"`
}
答案 0 :(得分:13)
如果使用混凝土类型会更容易。你可能想要使用encoding/csv
包,这是一个相关的例子; https://golang.org/pkg/encoding/csv/#example_Writer
正如您所看到的,Write
方法期望[]string
,因此为了生成此方法,您必须1)提供辅助方法或2)反映{{1} }。就个人而言,我更喜欢第一种方法,但这取决于您的需求。如果你想要路由二,你可以获得结构上的所有字段,并将它们用作列标题,然后迭代字段获取每个字段的值,在该循环中使用my_struct
将它们添加到{{ 1}}然后将其传递给循环的append
侧。
对于第一个选项,我会在每种类型上定义[]string
或其他内容,然后我会调用一个需要Write
方法的接口ToSlice
。更改方法CsvAble
中的类型而不是使用空接口,然后您只需在ToSlice
上调用my_struct CsvAble
并将返回值传递给ToSlice
。您也可以返回列标题(意味着您将返回my_struct
并需要迭代将每个Write
传递到[][]string
的外部维度,或者您可能需要另一个方法来满足[]string
之类的接口,返回Write
列标题。如果是这种情况,您的代码看起来就像;
GetHeaders
如果这没有意义,请告诉我,我可以跟进两种方法中的任何一种的代码示例。