0Pricing
Go Academy · Lección

Consulta de filas

Lea conjuntos de resultados

Consulta de filas es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.

Consultar conjuntos de resultados

Use Query para las sentencias que devuelven filas, como SELECT. Devuelve un *sql.Rows que puede recorrer. Para un único valor, QueryRow es más sencillo.

db.Query

Query envía el SQL y devuelve las filas junto con un error. Compruebe siempre el error antes de usar las filas.

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

Usar siempre defer rows.Close()

rows mantiene una conexión de la base de datos hasta que se cierra. defer rows.Close() la devuelve al pool. Olvidarse de esto filtra conexiones cuando hay carga.

defer rows.Close()

Iterar con rows.Next

rows.Next() avanza hasta la siguiente fila y devuelve false cuando termina. Dentro del bucle, llame a Scan para copiar los valores de las columnas en 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 requiere punteros

Scan escribe en las variables que recibe, por lo que debe pasar punteros (&id, &name). El número y el orden de los punteros deben coincidir con las columnas seleccionadas.

Comprobar rows.Err

El bucle puede terminar porque se agotaron los datos o porque se produjo un error durante la iteración. Después del bucle, llame a rows.Err() para detectar cualquier error de iteración.

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

QueryRow para una fila

Cuando espera exactamente una fila, QueryRow junto con Scan resulta más limpio. Si ninguna fila coincide, Scan devuelve 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")
}

Simulación ejecutable de Scan

Las consultas reales necesitan una base de datos, por lo que este ejemplo ejecutable modela el flujo Query, Next, Scan sobre un slice en memoria para mostrar el patrón de iteración.

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

Gestionar NULL

Una columna NULL no se puede escanear en un string o int normal. Use sql.NullString, sql.NullInt64 o un tipo puntero para que el código pueda distinguir NULL de un valor vacío.

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

Escanear en structs

La biblioteca estándar escanea los datos en variables individuales, no en structs completos. Asigne las columnas a los campos del struct pasando &u.ID, &u.Name. Bibliotecas como sqlx automatizan este proceso.

Evitar SELECT *

Enumere las columnas explícitamente para que el orden de Scan sea estable. Un cambio de esquema que añada una columna romperá silenciosamente un Scan posicional si se basaba en SELECT *.

Comprobación rápida

Compruebe sus conocimientos sobre consultas.

Repaso

Ha aprendido a consultar filas:

  • Query devuelve *sql.Rows; use defer rows.Close()
  • Recorra con rows.Next y copie mediante Scan en punteros
  • Compruebe rows.Err() después del bucle
  • Use QueryRow para una sola fila; sql.ErrNoRows cuando no hay coincidencias
  • Use tipos Null para las columnas que admiten valores nulos

Preguntas frecuentes

¿La lección «Consulta de filas» es gratis?

Sí — el texto completo de «Consulta de filas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Consulta de filas»?

Lea conjuntos de resultados Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Go Academy?

No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Consulta de filas»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Go Academy?

Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Apertura de una conexión
  2. Consulta de filas
  3. Sentencias preparadas
  4. Transacciones
← Volver a Go Academy