如何在Go中从struct创建[]字符串

时间:2013-09-07 08:31:33

标签: struct go

如何在Go中从struct的值创建[]string?例如,在以下结构中:

type Person struct {
    Height    float64
    Weight    float64
    Name    string
    Born    string
}

Tim := Person{174.5, 68.3, "Tim", "United States"}

我想得到的是以下内容:

[]string{"174.5", "68.3", "Tim", "United States"}

由于我想将从结构派生的每条记录保存到CSV文件,并且Write的{​​{1}}方法需要将数据作为*csv.Writer,我必须将此类结构转换为[]string

当然我可以在struct上定义一个方法并让它返回[]string,但我想知道一种避免调用每个字段的方法(即person.Height,person.Weight,person.Name ...)因为实际数据包含更多字段。

感谢。

1 个答案:

答案 0 :(得分:3)

可能有更简单和/或更惯用的方法,但我想到的是使用reflect这样的包:

package main

import (
    "fmt"
    "reflect"
)

func main() {
    type Person struct {
        Height float64
        Weight float64
        Name   string
        Born   string
    }

    Tim := Person{174.5, 68.3, "Tim", "United States"}

    v := reflect.ValueOf(Tim)

    var ss []string
    for i := 0; i < v.NumField(); i++ {
        ss = append(ss, fmt.Sprintf("%v", v.Field(i).Interface()))
    }

    fmt.Println(ss)
}