dongliao2241
2017-05-17 14:33
浏览 269
已采纳

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

I'm using the github.com/fatih/structs package to convert values of all fields of a struct into []interface{} with the toValues() function. See here. This works fine, but eventually I want to write the values to a csv file by using the csv package. The csv.Write() function requires []string as input.

So in short: how can I easily convert the output of toValues() into an array of strings?

图片转代码服务由CSDN问答提供 功能建议

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

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

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • drkxgs9358 2017-05-17 14:38
    已采纳

    You can't simply convert []interface{} to []string even if all the values are of concrete type string, because those 2 types have different memory layout / representation. For details see Cannot convert []string to []interface {}.

    You have to define how you want values of different types to be represented by string values.

    The easiest and sensible way would be to iterate over the values, and use fmt.Sprint() to obtain a string representation of each, e.g.:

    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
    ", s)
    

    Output (try it on the 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}"]
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题