Maison  >  Article  >  développement back-end  >  Comment extraire les valeurs de colonne d'une instance de lignes Go SQL dans une chaîne [] ?

Comment extraire les valeurs de colonne d'une instance de lignes Go SQL dans une chaîne [] ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-12 10:22:01588parcourir

How to Extract Column Values from a Go SQL Rows Instance into a []string?

Extraction des valeurs de colonne dans []string à l'aide de l'instance Go SQL Rows

Défi :

De nombreuses tâches de programmation nécessitent l'extraction de lignes données des tables de base de données dans un format structuré. Dans Go, le package base de données/sql fournit des instances Rows pour parcourir les lignes de la table. Cependant, la méthode Scan de Rows s'attend à ce que les pointeurs ciblent des variables de types connus, ce qui peut être difficile lorsque le nombre et les types de colonnes sont inconnus à l'avance.

Solution :

Pour lire les colonnes d'une instance Rows dans une []string, vous pouvez utiliser l'approche suivante :

  1. Obtenir une colonne Noms : Appelez Rows.Columns() pour obtenir une tranche de noms de colonnes.
  2. Créer une tranche d'interface : Créez une tranche []interface{} appelée readCols avec la même longueur que les colonnes tranchent. Cette tranche contiendra les adresses des variables de chaîne.
  3. Créer une tranche de chaîne : Créez une tranche de chaîne [] vide appelée writeCols avec la même longueur que la tranche de colonnes. Cette tranche stockera les valeurs de chaîne.
  4. Remplir les adresses : Parcourez les indices de writeCols et attribuez chaque index dans readCols à l'adresse de l'élément correspondant dans writeCols.
  5. Scan Rows : Parcourez l'instance Rows à l'aide de Next() et Scan(). Passez readCols comme argument à Scan(), qui remplira les adresses de chaîne dans writeCols.
  6. Ajouter au résultat : Ajoutez les valeurs dans writeCols à la structure de données souhaitée, telle qu'un CSV écrivain.

Exemple :

package main

import (
    "fmt"
    "io"

    "database/sql"
)

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
}

Ce code vous permet de lire les colonnes d'une instance Rows et de les convertir en une []chaîne pour un traitement ultérieur .

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn