将struct写入csv文件

时间:2015-10-26 23:05:49

标签: csv go

将结构转储到提供的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"`
}

1 个答案:

答案 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

如果这没有意义,请告诉我,我可以跟进两种方法中的任何一种的代码示例。