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
- database/sql i sterowniki
- sqlx: mapowanie struktur i nazwane zapytania
- pgx: wysokowydajny sterownik PostgreSQL
- Transakcje i migracje