在Golang中将[]接口转换为[]字符串

时间:2017-05-17 14:33:27

标签: string go struct interface slice

我正在使用github.com/fatih/structs包将结构的所有字段的值转换为[]interface{}toValues()函数。见here。这很好,但最终我想通过使用csv包将值写入csv文件。 csv.Write()函数需要[]string作为输入。

简而言之:如何轻松地将toValues()的输出转换为字符串数组?

1 个答案:

答案 0 :(得分:15)

即使所有值都是具体类型[]interface{},也不能简单地将[]string转换为string,因为这两种类型具有不同的内存布局/表示。有关详细信息,请参阅Cannot convert []string to []interface {}

您必须定义如何通过string值来表示不同类型的值。

最简单明智的方法是迭代值,并使用fmt.Sprint()获取每个值的string表示,例如:

t := []interface{}{
    "zero",
    1, 2.0, 3.14,
    []int{4, 5},
    struct{ X, Y int }{6, 7},
}
fmt.Println(t)

s := make([]string, len(t))
for i, v := range t {
    s[i] = fmt.Sprint(v)
}
fmt.Println(s)
fmt.Printf("%q\n", s)

输出(在Go Playground上尝试):

[zero 1 2 3.14 [4 5] {6 7}]
[zero 1 2 3.14 [4 5] {6 7}]
["zero" "1" "2" "3.14" "[4 5]" "{6 7}"]