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 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab