En Go, la récupération des lignes d'une base de données peut être réalisée à l'aide de SQL package, tout en manipulant ces lignes et en les écrivant dans des fichiers tels que CSV peuvent être effectués à l'aide du package csv. Cependant, un problème survient lorsque le schéma de la table est inconnu et doit être déterminé dynamiquement.
La méthode Scan dans le type Rows s'attend à ce que les champs soient de types spécifiques basés sur le schéma de la table. Sans connaissance préalable de ce schéma, il est difficile de déterminer combien de colonnes existent et quels sont leurs types. Cela pose un défi lorsque l'on essaie de lire les colonnes dans un type générique tel que []string.
Pour surmonter ce problème, une tranche []interface{} peut être utilisé pour pointer vers chaque chaîne dans la tranche de chaîne []string. Ceci est nécessaire car Scan attend un tableau de pointeurs vers les variables de destination. L'extrait de code suivant illustre cette approche :
package main import ( "database/sql" "fmt" "log" ) func main() { // Establish a connection to the database. db, err := sql.Open("mysql", "user:pass@tcp(localhost:3306)/test") if err != nil { log.Fatal(err) } defer db.Close() // Execute the "SELECT *" query. rows, err := db.Query("SELECT * FROM my_table") if err != nil { log.Fatal(err) } defer rows.Close() // Get the column names. cols, err := rows.Columns() if err != nil { log.Fatal(err) } // Create an interface{} slice pointing to each string in the []string slice. var readCols = make([]interface{}, len(cols)) var writeCols = make([]string, len(cols)) for i, _ := range writeCols { readCols[i] = &writeCols[i] } // Iterate over the rows and scan the columns into the string slice. for rows.Next() { if err := rows.Scan(readCols...); err != nil { log.Fatal(err) } fmt.Println(writeCols) } }
Dans cet exemple, la tranche readCols contient des pointeurs vers chaque élément de la tranche writeCols. Lorsque Scan est appelé, les valeurs de la ligne sont affectées aux variables pointées par readCols, qui sont ensuite copiées dans la tranche writeCols. Cela permet la lecture dynamique des colonnes de la base de données dans une tranche de chaîne.
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!