Pengenalan package time.Timer
time.Timer
adalah package yang berhubungan dengan waktu atau kejadian yang akan terjadi saat proses dijalankan. Misalkan kita akan memberikan delay
selama beberapa detik untuk menuju ke proses selanjutnya atau ada skema hal lain.
Kenapa kita harus menggunakan time.Timer?
time.Timer
sering digunakan ketika kita ingin proses program kita untuk di eksekusi ke beberapa proses atau hanya satu proses dalam waktu tertentu atau di waktu tertentu saja atau di waktu selanjutnya dengan kurun waktu tertentu, sehingga kita bisa menjadwalkan proses selanjutnya akan dilakukan jeda dengan waktu tertentu semisal 1 second.
Penggunaan Method
Ada beberapa Metode yang bisa kita pakai diantaranya
time.NewTimer()
digunakan untuk inisialisasidelay
proses dengan satuan tertentu biasanya kita bisa tambahkantime.Second
time.After()
digunakan tanpa inisialisasi sehingga lebih ringkas dan diproses untuk melakukan delay setelah time tertentu sudah ditentukantime.AfterFunc()
digunakan hampir sama dengantime.After()
tetapi yang berbeda yaitu fungsi selanjutnya dikirim sebagai param yang nanti akan dilakukan eksekusi
Implementasi dan sampel time.NewTimer
Pada sample dan implementasi yang pertama yaitu kita akan mencetak proses dengan melakukan delay selama 5 detik. Berikut contoh kodenya.
func main() {
timer := time.NewTimer(5 * time.Second)
fmt.Println(time.Now())
time := <-timer.C
fmt.Println(time)
}
Pada kode diatas kita melakukan inisialisasi dengan menggunakan time.New(5*time.Second)
ini dimaksudkan kita akan membuat timer dengan detay
atau jeda selama 5 second sehingga saat kita cetak di proses selanjutnya akan terlihat perbedaan saat dilakukan cetak awal dan cetak akhir waktunya selama 5 detik. Berikut ini hasilnya jika kita eksekusi programnya.
✗ go run app.go
2023-07-14 19:31:12.30003 +0700 WIB m=+0.000059626
2023-07-14 19:31:17.300921 +0700 WIB m=+5.001097376
Selain itu kita juga bisa menggunakan time.After
untuk melakukan delay
terhadap proses dalam program. Ini lebih singkat lagi dan mudah untuk diimplementasikan. Misalkan seperti kode dibawah ini:
func main() {
fmt.Println(time.Now())
channel := time.After(5 * time.Second)
tick := <-channel
fmt.Println(tick)
}
Hasilnya akan sama seperti penggunaan time.NewTimer
✗ go run app.go
2023-07-14 19:43:02.209571 +0700 WIB m=+0.000136293
2023-07-14 19:43:07.211192 +0700 WIB m=+5.00188
Dan yang terakhir kita juga bisa menggunakan method time.AfterFunc()
yang mana ini perbedaannya yaitu melakukan delay
tetapi setelah itu dikirim fungsi apa yang akan dieksekusi setelah kita tambahkan delay
. Berikut contoh kodenya
func main() {
group := sync.WaitGroup{}
group.Add(1)
time.AfterFunc(5*time.Second, func() {
fmt.Println(time.Now())
fmt.Println("Execute after 5 seconds")
group.Done()
})
fmt.Println(time.Now())
group.Wait()
}
Hasil dari proses pada program diatas sebagai berikut.
✗ go run app.go
2023-07-14 19:48:25.971889 +0700 WIB m=+0.000073292
2023-07-14 19:48:30.972922 +0700 WIB m=+5.001231959
Execute after 5 seconds
Kesimpulan
Maka dapat kita pelajari bahwa package time
ini sebenarnya banyak sekali method-method yang biasanya kita perlukan terlebih ketika kita ingin melakukan delay
terhadap suatu proses yang bisa memberikan jeda yang sudah kita tentukan sebelumnya.