pemrograman

Mengenal Package Timer Pada Golang

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 inisialisasi delay proses dengan satuan tertentu biasanya kita bisa tambahkan time.Second
  • time.After() digunakan tanpa inisialisasi sehingga lebih ringkas dan diproses untuk melakukan delay setelah time tertentu sudah ditentukan
  • time.AfterFunc() digunakan hampir sama dengan time.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.

comments powered by Disqus