0Pricing
Go Academy · Pelajaran

database/sql dan Driver

Penyiapan DB, QueryRow, Scan, dan kumpulan koneksi

database/sql dan Driver adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.

Gambaran umum database/sql

database/sql adalah lapisan abstraksi basis data standar Go. Lapisan ini mengelola kumpulan koneksi dan dapat bekerja dengan basis data apa pun melalui plugin pengandar.

Mendaftarkan pengandar

Impor paket pengandar untuk efek sampingnya (pendaftaran pengandar). Kemudian buka koneksi:

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 vs db.Ping

sql.Open tidak membuat koneksi — fungsi ini memvalidasi DSN. Panggil db.Ping() atau db.PingContext(ctx) untuk memverifikasi bahwa koneksi masih aktif.

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

Melakukan kueri baris

Gunakan db.QueryContext untuk menjalankan SELECT dan memindai baris:

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

Kueri satu baris

db.QueryRowContext mengembalikan *Row untuk kueri yang diperkirakan mengembalikan paling banyak satu hasil:

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 */ }

Menjalankan mutasi

Gunakan db.ExecContext untuk INSERT, UPDATE, DELETE. Fungsi ini mengembalikan Result dengan jumlah baris yang terpengaruh dan ID penyisipan terakhir.

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

Pernyataan terkompilasi

Siapkan suatu pernyataan sekali, lalu jalankan berkali-kali secara efisien:

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

Pengaturan kumpulan koneksi

Konfigurasikan kumpulan koneksi untuk produksi:

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

Memeriksa rows.Err()

Setelah perulangan baris, selalu periksa rows.Err() — perulangan tersebut mungkin berhenti lebih awal karena galat jaringan.

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

Nilai NULL

Gunakan sql.NullString, sql.NullInt64, dan lainnya untuk menangani nilai NULL basis data yang jika tidak digunakan dapat menyebabkan kepanikan saat dipindai ke tipe Go non-pointer.

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

Daftar pengandar

Pengandar populer: github.com/lib/pq (PostgreSQL), github.com/go-sql-driver/mysql (MySQL), modernc.org/sqlite (SQLite, Go murni).

Pemeriksaan Singkat

Mengapa Anda harus selalu memanggil rows.Close() dan memeriksa rows.Err() setelah kueri?

Ringkasan: database/sql

Poin-poin penting:

  • Impor pengandar dengan _ untuk efek samping; sql.Open + Ping
  • QueryContext → rows.Next + Scan + rows.Close + rows.Err
  • ExecContext untuk mutasi; QueryRowContext untuk satu baris
  • SetMaxOpenConns, SetMaxIdleConns, SetConnMaxLifetime untuk kumpulan koneksi

Pertanyaan yang Sering Diajukan

Apakah pelajaran “database/sql dan Driver” gratis?

Ya — teks lengkap “database/sql dan Driver” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “database/sql dan Driver”?

Penyiapan DB, QueryRow, Scan, dan kumpulan koneksi Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Go Academy?

Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “database/sql dan Driver” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?

Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. database/sql dan Driver
  2. sqlx: Pemindaian Struct dan Kueri Bernama
  3. pgx: Driver PostgreSQL Berkinerja Tinggi
  4. Transaksi dan Migrasi
← Kembali ke Go Academy