Interroger des lignes
Lire les ensembles de résultats
Interroger des lignes est une leçon Go Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Go Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Go Academy comprend 4 leçons au total.
Interroger des ensembles de résultats
Utilisez Query pour les instructions qui renvoient des lignes, comme SELECT. Cette fonction renvoie un *sql.Rows que vous parcourez. Pour une seule valeur, QueryRow est plus simple.
db.Query
Query envoie le SQL et renvoie les lignes ainsi qu'une erreur. Vérifiez toujours l'erreur avant d'utiliser les lignes.
rows, err := db.Query("SELECT id, name FROM users WHERE active = $1", true)
if err != nil {
log.Fatal(err)
}Toujours utiliser defer avec rows.Close()
Les lignes conservent une connexion à la base de données jusqu'à leur fermeture. defer rows.Close() la rend au groupe de connexions. Oublier cette fermeture provoque des fuites de connexions sous forte charge.
defer rows.Close()Parcourir avec rows.Next
rows.Next() passe à la ligne suivante et renvoie false lorsqu'il n'y en a plus. Dans la boucle, appelez Scan pour copier les valeurs des colonnes dans des variables.
for rows.Next() {
var id int
var name string
if err := rows.Scan(&id, &name); err != nil {
log.Fatal(err)
}
fmt.Println(id, name)
}Scan prend des pointeurs
Scan écrit dans les variables que vous lui transmettez. Vous devez donc fournir des pointeurs (&id, &name). Le nombre et l'ordre des pointeurs doivent correspondre aux colonnes sélectionnées.
Vérifier rows.Err
La boucle peut se terminer parce qu'il n'y a plus de données ou parce qu'une erreur s'est produite pendant le parcours. Après la boucle, appelez rows.Err() pour détecter toute erreur de parcours.
if err := rows.Err(); err != nil {
log.Fatal(err)
}QueryRow pour une ligne
Lorsque vous attendez exactement une ligne, associer QueryRow à Scan est plus clair. Si aucune ligne ne correspond, Scan renvoie sql.ErrNoRows.
var name string
err := db.QueryRow("SELECT name FROM users WHERE id = $1", 7).Scan(&name)
if err == sql.ErrNoRows {
fmt.Println("not found")
}Une simulation exécutable de Scan
Les requêtes réelles nécessitent une base de données. Cet exemple exécutable reproduit donc le déroulement Query, Next, Scan sur une tranche en mémoire afin de montrer le modèle de parcours.
package main
import "fmt"
type Row struct {
ID int
Name string
}
func main() {
rows := []Row{{1, "Ada"}, {2, "Lin"}, {3, "Guido"}}
for i := 0; i < len(rows); i++ {
var id int
var name string
id = rows[i].ID
name = rows[i].Name
fmt.Printf("id=%d name=%s\n", id, name)
}
fmt.Println("scanned", len(rows), "rows")
}Gérer les valeurs NULL
Une colonne NULL ne peut pas être analysée dans une chaîne ou un entier ordinaire. Utilisez sql.NullString, sql.NullInt64 ou un type pointeur afin que le code puisse distinguer NULL d'une valeur vide.
var email sql.NullString
rows.Scan(&email)
if email.Valid {
fmt.Println(email.String)
}Analyser dans des structures
La bibliothèque standard analyse les données dans des variables individuelles, et non dans des structures entières. Vous associez les colonnes aux champs de la structure en transmettant &u.ID, &u.Name. Des bibliothèques comme sqlx automatisent cette opération.
Éviter SELECT *
Énumérez explicitement les colonnes afin que l'ordre de Scan reste stable. Une modification du schéma qui ajoute une colonne rompra silencieusement un Scan positionnel si vous vous appuyez sur SELECT *.
Vérification rapide
Testez vos connaissances sur les requêtes.
Récapitulatif
Vous avez appris à interroger des lignes :
- Query renvoie *sql.Rows ; utilisez defer rows.Close()
- Parcourez les résultats avec rows.Next et copiez-les via Scan dans des pointeurs
- Vérifiez rows.Err() après la boucle
- Utilisez QueryRow pour une seule ligne ; sql.ErrNoRows en cas d'absence de résultat
- Utilisez les types Null pour les colonnes pouvant contenir NULL
Questions Fréquemment Posées
La leçon « Interroger des lignes » est-elle gratuite ?
Oui — le texte complet de « Interroger des lignes » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Go Academy, passe à CoddyKit PRO. Le cours Go Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Interroger des lignes » ?
Lire les ensembles de résultats Tu pratiques Go Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Go Academy ?
Aucune expérience préalable n'est requise. Go Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Interroger des lignes » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Go Academy ?
Oui. Chaque leçon Go Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Ouvrir une connexion
- Interroger des lignes
- Instructions préparées
- Transactions