J'utilise le package github.com/fatih/structs pour convertir les valeurs de tous les champs d'une structure en []interface{}
Avec la fonction toValues()
. Voir ici . Cela fonctionne bien, mais finalement je veux écrire les valeurs dans un fichier csv en utilisant le package csv. La fonction csv.Write()
requiert []string
Comme entrée.
Donc en bref: comment convertir facilement la sortie de toValues()
en un tableau de chaînes?
Vous ne pouvez pas simplement convertir []interface{}
En []string
Même si toutes les valeurs sont de type concret string
, car ces 2 types ont une disposition/représentation de mémoire différente. Pour plus de détails, voir Impossible de convertir la chaîne [] en interface [] {} .
Vous devez définir comment vous voulez que les valeurs de différents types soient représentées par des valeurs string
.
Le moyen le plus simple et le plus judicieux serait d'itérer sur les valeurs et d'utiliser fmt.Sprint()
pour obtenir une représentation string
de chacune, par exemple:
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\n", s)
Sortie (essayez-le sur le 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}"]