Time Duration
Ukur dan hitung selisih waktu secara type-safe.
Pahami konsepnya
time.Duration adalah tipe khusus untuk rentang waktu — di balik layar int64 nanodetik, tetapi kamu hampir selalu menulisnya dengan konstanta yang terbaca manusiawi: 5*time.Second, 250*time.Millisecond, 2*time.Hour. Perkalian seperti itu adalah idiom, bukan kebetulan sintaks.
Operasi aritmatikanya lengkap: durasi bisa dijumlah, dikurang, dikalikan skalar, dibanding, dan dikonversi ke satuan lain lewat .Seconds(), .Milliseconds(), .Minutes(). Selisih dua waktu didapat lewat a.Sub(b) yang menghasilkan Duration; tanda negatif berarti a lebih awal.
Dua pemakaian utama: mengukur lama eksekusi (t0 := time.Now(); ...; time.Since(t0)) dan membatasi tunggu (timeout, TTL cache). time.Since(t0) adalah kependekan dari time.Now().Sub(t0) — dan hasilnya siap dicetak dengan %v yang otomatis memilih satuan terbaca ("1.5s", "2m30s").
Coba contoh kode
package main
import (
"fmt"
"time"
)
func main() {
mulai := time.Now()
time.Sleep(750 * time.Millisecond)
fmt.Printf("lama: %v\n", time.Since(mulai))
tugas := 2*time.Hour + 30*time.Minute
fmt.Println(tugas, "=", tugas.Minutes(), "menit")
}time.Since(mulai) mengukur rentang eksekusi — cetakan %v otomatis menampilkan "750.123ms" dalam satuan yang enak dibaca. Konstanta Duration bisa dijumlah langsung (2 jam + 30 menit) lalu dikonversi ke menit lewat .Minutes().
Membandingkan durasi
func lambatKah(proses func()) bool {
mulai := time.Now()
proses()
return time.Since(mulai) > 500*time.Millisecond
}
func main() {
fmt.Println(lambatKah(func() { time.Sleep(80 * time.Millisecond) })) // false
fmt.Println(lambatKah(func() { time.Sleep(900 * time.Millisecond) })) // true
}Duration dibandingkan dengan operator biasa (> < ==) karena tipenya teratur. Fungsi pembungkus seperti ini mengubah pengukuran waktu menjadi keputusan program: melewati ambang 500 ms berarti "lambat" — pintu masuk sederhana menuju monitoring dan circuit breaker.
Latihan singkat
Uji: ukur pengurutan 10.000 angka — bila durasinya di bawah 1 detik program harus mencetak persis `cepat`, selain itu `lambat`.