0Pricing
Go Academy · Pelajaran

Mengeksekusi Kueri Baris

Baca kumpulan hasil

Mengeksekusi Kueri Baris adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 2 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.

Mengueri Kumpulan Hasil

Gunakan Query untuk pernyataan yang mengembalikan baris, seperti SELECT. Fungsi ini mengembalikan *sql.Rows yang Anda iterasikan. Untuk satu nilai, QueryRow lebih sederhana.

db.Query

Query mengirim SQL dan mengembalikan baris beserta error. Selalu periksa error sebelum menggunakan baris tersebut.

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

Selalu gunakan defer rows.Close()

Baris tersebut menahan koneksi basis data sampai ditutup. defer rows.Close() mengembalikannya ke kumpulan koneksi. Lupa melakukan ini akan membocorkan koneksi saat beban tinggi.

defer rows.Close()

Melakukan Iterasi dengan rows.Next

rows.Next() berpindah ke baris berikutnya dan mengembalikan false saat semua baris selesai. Di dalam perulangan, Anda memanggil Scan untuk menyalin nilai kolom ke dalam variabel.

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 Menerima Pointer

Scan menulis ke dalam variabel yang Anda berikan, jadi Anda harus memberikan pointer (&id, &name). Jumlah dan urutan pointer harus sesuai dengan kolom yang dipilih.

Memeriksa rows.Err

Perulangan dapat berakhir karena data habis atau karena terjadi error di tengah iterasi. Setelah perulangan, panggil rows.Err() untuk menangkap error iterasi.

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

QueryRow untuk Satu Baris

Saat Anda mengharapkan tepat satu baris, penggunaan QueryRow bersama Scan lebih rapi. Jika tidak ada baris yang cocok, Scan mengembalikan 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")
}

Simulasi Scan yang Dapat Dijalankan

Kueri nyata memerlukan basis data, jadi contoh yang dapat dijalankan ini memodelkan alur Query, Next, Scan pada irisan dalam memori untuk menunjukkan pola iterasi.

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

Menangani NULL

Kolom NULL tidak dapat dipindai ke string atau int biasa. Gunakan sql.NullString, sql.NullInt64, atau tipe pointer agar kode dapat membedakan NULL dari nilai kosong.

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

Memindai ke dalam Struct

Pustaka standar memindai ke dalam variabel individual, bukan struct utuh. Anda memetakan kolom ke bidang struct dengan memberikan &u.ID, &u.Name. Pustaka seperti sqlx mengotomatiskan hal ini.

Hindari SELECT *

Daftarkan kolom secara eksplisit agar urutan Scan tetap stabil. Perubahan skema yang menambahkan kolom akan secara diam-diam merusak Scan berdasarkan posisi jika Anda mengandalkan SELECT *.

Pemeriksaan Singkat

Uji pemahaman Anda tentang kueri.

Ringkasan

Anda telah mempelajari cara mengueri baris:

  • Query mengembalikan *sql.Rows; gunakan defer rows.Close()
  • Lakukan perulangan dengan rows.Next, lalu salin melalui Scan ke dalam pointer
  • Periksa rows.Err() setelah perulangan
  • Gunakan QueryRow untuk satu baris; sql.ErrNoRows jika tidak ditemukan
  • Gunakan tipe Null untuk kolom yang dapat bernilai NULL

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mengeksekusi Kueri Baris” gratis?

Ya — teks lengkap “Mengeksekusi Kueri Baris” 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 “Mengeksekusi Kueri Baris”?

Baca kumpulan hasil 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 2 dari 4.

Berapa lama pelajaran “Mengeksekusi Kueri Baris” 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. Membuka Koneksi
  2. Mengeksekusi Kueri Baris
  3. Pernyataan Terlebih Dahulu
  4. Transaksi
← Kembali ke Go Academy