0Pricing
Go Academy · Lekcja

database/sql i sterowniki

Konfiguracja DB, QueryRow, Scan i pule połączeń

database/sql i sterowniki to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Go Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Go Academy zawiera 4 lekcji w sumie.

Omówienie database/sql

database/sql to standardowa warstwa abstrakcji baz danych w Go. Zarządza pulą połączeń i współpracuje z dowolną bazą danych za pośrednictwem wtyczki sterownika.

Rejestrowanie sterownika

Należy zaimportować pakiet sterownika dla efektów ubocznych (rejestracji sterownika). Następnie należy otworzyć połączenie:

import _ "github.com/lib/pq" // PostgreSQL driver

db, err := sql.Open("postgres", "postgres://user:pass@localhost/mydb?sslmode=disable")
if err != nil { log.Fatal(err) }
defer db.Close()

sql.Open a db.Ping

sql.Open nie nawiązuje połączenia — sprawdza DSN. Należy wywołać db.Ping() lub db.PingContext(ctx), aby sprawdzić, czy połączenie działa.

if err := db.Ping(); err != nil { log.Fatal(err) }

Pobieranie wierszy

Należy użyć db.QueryContext, aby wykonać zapytanie SELECT i skanować wiersze:

rows, err := db.QueryContext(ctx, "SELECT id, name FROM users WHERE active = $1", true)
if err != nil { return err }
defer rows.Close()
for rows.Next() {
    var id int; var name string
    rows.Scan(&id, &name)
}

Zapytanie zwracające jeden wiersz

db.QueryRowContext zwraca *Row dla zapytań, które powinny zwrócić najwyżej jeden wynik:

var name string
err := db.QueryRowContext(ctx, "SELECT name FROM users WHERE id = $1", id).Scan(&name)
if errors.Is(err, sql.ErrNoRows) { /* not found */ }

Wykonywanie modyfikacji

Należy używać db.ExecContext dla operacji INSERT, UPDATE i DELETE. Zwraca on Result zawierający liczbę zmodyfikowanych wierszy oraz identyfikator ostatnio wstawionego rekordu.

result, err := db.ExecContext(ctx, "INSERT INTO users(name) VALUES($1)", name)
if err != nil { return err }
id, _ := result.LastInsertId()

Instrukcje przygotowane

Instrukcję należy przygotować raz, a następnie wydajnie wykonywać ją wielokrotnie:

stmt, err := db.PrepareContext(ctx, "SELECT id FROM users WHERE email = $1")
defer stmt.Close()
for _, email := range emails {
    row := stmt.QueryRowContext(ctx, email)
}

Ustawienia puli połączeń

Pulę należy skonfigurować na potrzeby środowiska produkcyjnego:

db.SetMaxOpenConns(25)
db.SetMaxIdleConns(25)
db.SetConnMaxLifetime(5 * time.Minute)

Sprawdzanie rows.Err()

Po zakończeniu pętli przetwarzającej wiersze należy zawsze sprawdzić rows.Err() — pętla mogła zakończyć się wcześniej z powodu błędu sieci.

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

Wartości null

Należy używać sql.NullString, sql.NullInt64 itd. do obsługi wartości NULL z bazy danych, które w przeciwnym razie mogłyby spowodować panikę podczas skanowania do niebędącego wskaźnikiem typu Go.

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

Lista sterowników

Popularne sterowniki: github.com/lib/pq (PostgreSQL), github.com/go-sql-driver/mysql (MySQL), modernc.org/sqlite (SQLite, czysty Go).

Szybki test

Dlaczego po wykonaniu zapytania należy zawsze wywołać rows.Close() i sprawdzić rows.Err()?

Podsumowanie: database/sql

Najważniejsze informacje:

  • Importuj sterownik za pomocą _, aby wywołać efekty uboczne; sql.Open + Ping
  • QueryContext → rows.Next + Scan + rows.Close + rows.Err
  • ExecContext do modyfikacji; QueryRowContext dla pojedynczych wierszy
  • SetMaxOpenConns, SetMaxIdleConns, SetConnMaxLifetime do konfiguracji puli

Często zadawane pytania

Czy lekcja „database/sql i sterowniki” jest bezpłatna?

Tak — pełny tekst „database/sql i sterowniki” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Go Academy, przejdź na CoddyKit PRO. Kurs Go Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „database/sql i sterowniki”?

Konfiguracja DB, QueryRow, Scan i pule połączeń Ćwiczysz Go Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Go Academy?

Nie wymagamy żadnego doświadczenia. Go Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „database/sql i sterowniki”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Go Academy?

Tak. Każda lekcja Go Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. database/sql i sterowniki
  2. sqlx: mapowanie struktur i nazwane zapytania
  3. pgx: wysokowydajny sterownik PostgreSQL
  4. Transakcje i migracje
← Powrót do Go Academy