Проверьте это:
func main() {
type Something struct {
Some string
Thing int
}
var props []string
var vals []string
m := Something{"smth", 123}
s := reflect.ValueOf(m)
for i := 0; i < s.NumField(); i++ {
props = append(props, s.Type().Field(i).Name)
vals = append(vals, fmt.Sprintf("%v", s.Field(i).Interface()))
}
fmt.Println(props)
fmt.Println(vals)
}
Результат:
[Some Thing]
[smth 123]
Он также работает с именованными полями, такими как:
Something{
Some: "smth",
Thing: 123,
}
Также как вам нужен массив (фактически фрагмент!) строк (даже если ваши значения имеют другой тип, например, int), вы можете использовать fmt.Sprintf()
для преобразования interface{}
в строку