0Pricing
Go Academy · Lezione

Eseguire query sulle righe

Leggere i set di risultati

Eseguire query sulle righe è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Go Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Go Academy include 4 lezioni in totale.

Eseguire query sui set di risultati

Utilizzi Query per le istruzioni che restituiscono righe, come SELECT. Restituisce un *sql.Rows da scorrere. Per un singolo valore, QueryRow è più semplice.

db.Query

Query invia l'SQL e restituisce le righe insieme a un errore. Verifichi sempre l'errore prima di utilizzare le righe.

rows, err := db.Query("SELECT id, name FROM users WHERE active = $1", true)
if err != nil {
    log.Fatal(err)
}

Inserire sempre rows.Close() in defer

Le righe mantengono una connessione al database finché non vengono chiuse. defer rows.Close() la restituisce al pool. Dimenticarlo causa perdite di connessioni sotto carico.

defer rows.Close()

Iterare con rows.Next

rows.Next() passa alla riga successiva e restituisce false al termine. All'interno del ciclo si chiama Scan per copiare i valori delle colonne nelle variabili.

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 richiede puntatori

Scan scrive nelle variabili passate, quindi deve passare puntatori (&id, &name). Il numero e l'ordine dei puntatori devono corrispondere alle colonne selezionate.

Controllare rows.Err

Il ciclo può terminare perché i dati sono esauriti oppure perché si è verificato un errore durante l'iterazione. Dopo il ciclo, chiami rows.Err() per rilevare eventuali errori di iterazione.

if err := rows.Err(); err != nil {
    log.Fatal(err)
}

QueryRow per una riga

Quando si prevede esattamente una riga, la combinazione di QueryRow e Scan è più chiara. Se nessuna riga corrisponde, Scan restituisce 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")
}

Una simulazione eseguibile di Scan

Le query reali richiedono un database, quindi questo esempio eseguibile simula il flusso Query, Next, Scan su una slice in memoria per mostrare il modello di iterazione.

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")
}

Gestire i valori NULL

Una colonna NULL non può essere acquisita in una stringa o in un int semplice. Utilizzi sql.NullString, sql.NullInt64 o un tipo puntatore, così il codice può distinguere NULL da un valore vuoto.

var email sql.NullString
rows.Scan(&email)
if email.Valid {
    fmt.Println(email.String)
}

Acquisire dati nelle struct

La libreria standard acquisisce i dati in singole variabili, non in struct intere. Mappi le colonne nei campi della struct passando &u.ID, &u.Name. Librerie come sqlx automatizzano questa operazione.

Evitare SELECT *

Indichi esplicitamente le colonne, così l'ordine usato da Scan rimane stabile. Una modifica allo schema che aggiunge una colonna interromperà silenziosamente uno Scan posizionale se si è utilizzato SELECT *.

Verifica rapida

Verifichi la Sua conoscenza delle query.

Riepilogo

Ha imparato a interrogare le righe:

  • Query restituisce *sql.Rows; inserisca rows.Close() in defer
  • Ripeta il ciclo con rows.Next e copi i dati tramite Scan nei puntatori
  • Controlli rows.Err() dopo il ciclo
  • Utilizzi QueryRow per una singola riga; sql.ErrNoRows quando non ci sono risultati
  • Utilizzi i tipi Null per le colonne che ammettono NULL

Domande Frequenti

La lezione «Eseguire query sulle righe» è gratuita?

Sì — il testo completo di «Eseguire query sulle righe» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Go Academy, passa a CoddyKit PRO. Il corso Go Academy include 4 lezioni in totale.

Cosa imparerò in «Eseguire query sulle righe»?

Leggere i set di risultati Eserciti Go Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Go Academy?

Non è richiesta alcuna esperienza precedente. Go Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Eseguire query sulle righe»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Go Academy?

Sì. Ogni lezione Go Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Aprire una connessione
  2. Eseguire query sulle righe
  3. Istruzioni preparate
  4. Transazioni
← Torna a Go Academy