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

在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?

  • 写回答

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}"]
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器