我正在使用github.com/fatih/structs包将struct的所有字段的值转换[]interface{}为toValues()函数。看这里。这工作正常,但最终我想通过使用csv包将值写入csv文件。该csv.Write()功能需要[]string作为输入。
[]interface{}
toValues()
csv.Write()
[]string
简而言之:我如何轻松地将的输出转换toValues()为字符串数组?
即使所有值都是具体类型,也不能简单地转换[]interface{}为,因为这两种类型具有不同的内存布局/表示形式。
您必须定义如何用string值表示不同类型的值。
string
最简单和明智的方法是遍历值,并使用它们fmt.Sprint()来获取string每个值的表示形式,例如:
fmt.Sprint()
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}"]