Query Parameter: Filter & Paginasi
Membaca ?done=true, ?page= dan ?limit= untuk memfilter dan memecah daftar todo per halaman.
Apa itu query parameter?
Bagian alamat setelah tanda ?, berbentuk nama=nilai dan dipisah &. Cocok untuk opsi tambahan pada GET tanpa mengubah alamat utamanya:
GET /todos?done=true → hanya yang sudah selesai
GET /todos?page=2&limit=5 → halaman 2, 5 data per halaman
Membacanya di Go
q := r.URL.Query() // semua query parameter
done := q.Get("done") // "true" / "false" / "" bila tidak dikirim
Get selalu mengembalikan string, dan string kosong jika parameter tidak ada. Angka diubah dengan strconv.Atoi; jika gagal, kita pakai nilai bawaan.
Filter
if done != "" {
want := done == "true" // true / false
// simpan hanya todo yang t.Done == want
}
Paginasi (halaman)
Mengirim ribuan data sekaligus itu boros. Paginasi memecahnya per halaman. Dari page dan limit kita hitung irisan slice:
start := (page - 1) * limit // page 1 → 0, page 2 → limit, ...
end := start + limit
items[start:end]
| page | limit | start | end | Data |
|---|---|---|---|---|
| 1 | 2 | 0 | 2 | item ke-1 dan 2 |
| 2 | 2 | 2 | 4 | item ke-3 dan 4 |
Jangan sampai panic
Mengiris slice di luar batas membuat program panic. Karena itu start dan end dibatasi paling besar len(items). Halaman yang melewati data akan menghasilkan [], bukan error.
Nilai bawaan: page = 1, limit = 10 bila tidak dikirim atau tidak valid.