Lecture des colonnes "SELECT *" dans une []chaîne dans Go
Dans le monde des bases de données, récupérer les données d'une table à l'aide d'un "SELECT "La requête est une pratique courante, mais dans le monde de la programmation, travailler manuellement avec de telles données peut s'avérer fastidieux. Cet article vise à simplifier le processus de lecture des résultats de la requête « SELECT » dans une tranche de chaîne []string dans Go, en tirant parti de la robuste bibliothèque standard Go.
Lorsque vous traitez une table avec un nombre inconnu de colonnes et les types de données, le défi réside dans la capture des données sous une forme structurée. La méthode Scan fournie par Rows vous permet de remplir des types de données spécifiques dans des variables prédéfinies, mais elle n'offre pas de moyen direct de lire dans une []chaîne.
Pour surmonter ce problème, nous utilisons une technique qui crée une tranche []interface{}, où chaque élément est un pointeur vers une chaîne dans la tranche []string. Cette étape de pontage permet à la méthode Scan de remplir la tranche d'interface, qui peut ensuite être facilement convertie en la []chaîne souhaitée.
Voici une version révisée de l'exemple de code fourni dans la question :
func dumpTable(rows *sql.Rows, out io.Writer) error { colNames, err := rows.Columns() if err != nil { return err } writer := csv.NewWriter(out) writer.Comma = '\t' readCols := make([]interface{}, len(colNames)) writeCols := make([]string, len(colNames)) for i, _ := range writeCols { readCols[i] = &writeCols[i] } for rows.Next() { err := rows.Scan(readCols...) if err != nil { return err } writer.Write(writeCols) } if err = rows.Err(); err != nil { return err } writer.Flush() return nil }
Cette solution comble de manière transparente le fossé entre la méthode Scan et la chaîne [], vous permettant de stocker les résultats de la requête « SELECT * » dans un format structuré et utilisable.
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!