Maison >développement back-end >Golang >Convertir la structure en chaîne CSV
l'éditeur php Youzi vous présentera comment convertir la structure de données en chaîne CSV dans cet article. CSV (Comma Separated Values) est un format de fichier couramment utilisé pour stocker des données tabulaires. En convertissant la structure des données en chaîne CSV, vous pouvez facilement exporter les données vers d'autres outils tels qu'Excel pour le traitement et l'analyse. Dans cet article, nous explorerons les méthodes et techniques pour mettre en œuvre ce processus à l'aide du langage de programmation PHP. Que vous soyez un développeur débutant ou expérimenté, cet article vous fournira des conseils utiles et des exemples de code pour vous aider à accomplir facilement cette tâche.
J'ai une structure qui est analysée après que la base de données répond comme indiqué ci-dessous. Chaque champ est le même len(). Je veux prendre cette structure et générer une chaîne délimitée par CSV/
package main import "fmt" type data struct { id []string col1 []float64 col2 []float64 } func main() { d := &data{ id: []string{"id_1", "id_1", "id_1", "id_1"}, col1: []float64{340.384926, 321.385028, 520.341473, 500.385473}, col2: []float64{123.285031, 4087.284675, -8958.284216, -7612.283668}, } fmt.printf("%+v", d) }
Je souhaite parcourir une structure que je pense pouvoir utiliser reflect
, puis utiliser les noms de champs de structure comme en-têtes et les valeurs comme colonnes individuelles de cet en-tête pour construire une chaîne CSV comme celle ci-dessous, séparée par une virgule. .
` id,col1,col2 id_1,340.384926,123.285031 id_1,321.385028,4087.284675 id_1,520.341473,-8958.284216 id_1,500.385473,-7612.283668 `
Quel est le moyen efficace d’y parvenir ?
Si possible, évitez d'utiliser des reflect
迭代结构体,因为它可能导致性能下降和代码可读性降低。不要陷入 xy 问题 - 这里的要求是将 data
结构转换为 csv 字符串(y 问题),但这里的 x 问题是避免使用 data
structures itératives car cela peut entraîner une dégradation des performances et une lisibilité du code. Ne tombez pas dans le problème xy
données
structure en chaîne de caractères csv (problème y), mais le problème x ici est d'éviter d'utiliser des types structurels tels que data
comme point de départ. De nombreux packages Golang pour manipuler les fichiers CSV préfèrent :
data
类型不可避免,可以先编写一个函数,将data
转换为[][]string
,同时避免使用reflect
Cependant, si le type data
est inévitable, vous pouvez d'abord écrire une fonction pour convertir data
en
: encoding/csv
中的 w.writeall()
方法轻松将 [][]string
func transformdatato2dslice(d data) [][]string { numrows := len(d.id) result := make([][]string, numrows+1) // add header row result[0] = []string{"id", "col1", "col2"} // add data rows for i := 0; i < numrows; i++ { result[i+1] = []string{d.id[i], strconv.formatfloat(d.col1[i], 'f', -1, 64), strconv.formatfloat(d.col2[i], 'f', -1, 64), } } return result }Ensuite, utilisez la méthode
w.writeall()
dans encoding/csv
pour convertir facilement go-playground
🎜Pour écrire un csv dans une variable chaîne, transmettez le tampon : 🎜
buf := new(bytes.Buffer) w := csv.NewWriter(buf) w.WriteAll(d2dslice) if err := w.Error(); err != nil { log.Fatalln("error writing csv:", err) } csvString := buf.String() fmt.Printf("%T\n", csvString) // print the variable type // string fmt.Printf("%+v\n", csvString) // print the variable value // id,col1,col2 // id_1,340.384926,123.285031 // id_1,321.385028,4087.284675 // id_1,520.341473,-8958.284216 // id_1,500.385473,-7612.283668
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!