Pengenalan package context
Context merupakan package yang bisa menyimpan dan membawa suatu data value, sinyal timeout dan sinyal deadline. Context ini berjalan dan dibuat per satu request. Pada context biasanya akan membawa value dari inisialisasi sampai akhir proses dijalankan. Context ini kadang jadi keharusan ketika kita melakukan kode pada program agar dari awal fungsi menuju ke fungsi selanjutnya itu bisa digunakan value sebelumnya apabila proses pada fungsi selanjutnya membutuhkan data dari proses awal.
Kenapa kita harus menggunakan context?
Bermanfaat untuk mengirimkan suatu value ke dalam sinyal, dan meneruskan ke tahapan-tahapan atau fungsi selanjutnya dengan membawa value dari awal sampai akhir. Selain itu kita juga bisa membatalkan proses yang diinginkan sehingga proses-proses selanjutnya akan di batalkan semuanya dengan cara mengirim sinyal batalkan.
Context menganut konsep parent
dan child
proses, dimana jika kita membuat context, kita juga bisa membuat child context dari yang sudah ada, bahkan dalam satu parent context bisa banyak context child. Namu dalam context child hanya memiliki satu parent context saja. Konsep ini bagi kita sudah paham sama seperti halnya pewarisan yang biasanya dijelaskan pada pemrograman berorientasi objek.
Context juga merupakan object yang immutable, yang mana setelah context dibuat maka tidak akan bisa diubah lagi. Jadi jika kita akan menambah atau merubah context maka secara otomatis context tersebut akan membuat child baru bukan merubah context tersebut.
Penggunaan Method
Context dalam golang ini berbentuk interface
sehingga kita membutuhkan sebuat struct yang sesuai dengan contract yang ada pada interface tersebut. Namun jangan khawatir, golang telah menyediakan beberapa fungsi yang bisa kita gunakan untuk membuat context
.
Fungsi | Kegunaan |
---|---|
context.Background() | membuat context default kosong, tidak ada pembatalan, tidak ada timeout, dan tidak memiliki value. Biasanya digunakan untuk awal proses inisialisasi. |
context.TODO() | membuat context sama seperti halnya background tetapi kita belum tahu apa yang akan diinginkan |
Implementasi dan sampel
Pada implementasinya perbedaan dari context.Background()
dan context.TODO()
memang tidak begitu berbeda hanya saja informasi yang dilakukan berbeda value saja saat context tersebut dilakukan inisialisasi.
func main() {
background := context.Background()
fmt.Println(background)
todo := context.TODO()
fmt.Println(todo)
}
Berikut ini hasil ketika kita menjalankan program diatas.
✗ go run app.go
context.Background
context.TODO
Kesimpulan
Context bisa membantu kita untuk melakukan trace terhadap program yang sudah kita buat karena nantinya context ini wajib kita kirim sebagai param pada tiap fungsi agar setiap fungsi tersebut menyimpan data dan juga bisa mendapatkan data dari fungsi-fungsi sebelumnya yang dilewati oleh proses dari program tersebut. Pada sesi selanjutnya akan kita bahas lagi bagaimana cara implementasi lebih mendalam agar kita paham betul kenapa kita perlu mengimplementasikan context ini dalam melakukan kode di dalam bahasa golang.