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
- Membuka Koneksi
- Mengeksekusi Kueri Baris
- Pernyataan Terlebih Dahulu
- Transaksi