raviMukti / training-golang-context

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Training Golang Context

  1. Context merupakan sebuah data yang membawa value, sinyal cancel, sinyal timeout dan sinyal deadline. Biasanya dibuat per request (misal setiap ada request masuk ke server web melalui http request). Context mempermudah kita dalam meneruskan value dan sinyal antar proses
  2. Hampir semua bagian di Golang memanfaatkan context, seperti database, http server, http client, dll.
  3. context.Background() untuk membuat context kosong yang tidak pernah dibatalkan, tidak pernah timeout, dan tidak memiliki value apapun. Biasanya digunakan di main function atau dalam test, atau dalam proses awal proses request terjadi
  4. context.TODO() membuat context kosong seperti Background() namun biasanya menggunakan ini ketika belum jelas context apa yang digunakan
  5. Context menganut konsep Parent dan Child artinya saat kita membuat context kita bisa membuat child context dari context yg sudah ada, parent context bisa memiliki banyak child namun child context hanya memiliki satu parent context konsep ini mirip dengan inheritance di OOP
  6. Parent dan child akan selalu terhubung, saat nanti kita melakukan pembatalan context A, maka semua child dan sub child dari context A akan ikut dibatalkan
  7. Context merupakan object yang immutable (artinya setelah context dibuat dia tidak bisa diubah lagi). Nah ketika kita menambahkan value ke dalam context atau menambahkan pengaturan timeout dan yang lainnya secara otomatis akan membentuk child context baru bukan merubah context tersebut
  8. Untuk membuat atau menambahkan value ke context kita bisa menggunakan function context.WithValue(parent, key, value) sedangkan untuk mengambil value kita bisa menggunakan perintah context.Value()
  9. Selain menambahkan value ke context kita juga bisa menambahkan sinyal cancel ke context. Kapan sinyal cancel diperlukan dalam context? Biasanya ketika kita butuh menjalankan proses lain, dan kita ingin bisa memberi sinyal cancel ke proses tersebut, proses disini biasanya berupa Goroutine yang berbeda sehingga dengan mudah jika kita ingin membatalkan eksekusi goroutine kita bisa mengirim sinyal cancel ke context nya. namun ingat goroutine yang menggunakan context harus tetap melakukan pengecekan terhadap contextnya, jika tidak, tidak ada gunanya. Untuk membuat context dengan sinyal cancel kita bisa menggunakan function context.WithCancel(parent)
  10. Goroutine harus mengecek sinyal cancel pada context, karena jika tidak maka akan menimbulkan Goroutine Leak yang lama kelamaan akan mengakibatkan aplikasi menjadi lambat, konsumsi memory besar dan tiba tiba apps nya mati
  11. Selain menambahkan value ke context dan juga sinyal cancel kita juga bisa menambahkan sinyal cancel ke context secara otomatis dengan menggunakan pengaturan timeout, dengan menggunakan pengaturan timeout kita tidak perlu lagi melakukan eksekusi cancel secara manual, cancel akan otomatis dieksekusi jika waktu timeout sudah terlewati
  12. Penggunaan context dengan timeout sangat cocok ketika misal kita melakukan query ke database, http api namun ingin menentukan batas maksimal timeout nya, untuk membuat context dengan cancel sinyal otomatis menggunakan timeout kita bisa menggunakan function context.WithTimeout(parent, duration)
  13. Selain menggunakan timeout untuk melakukan cancel secara otomatis kita juga bisa menggunakan deadline, pengaturan deadline sedikit berbeda dengan timeout, jika timeout kita beri waktu dari sekarang, maka deadline ditentukan kapan waktu timeout nya, misal jam 12 siang hari ini. untuk membuat context dengan cancel signal otomatis menggunakan deadline kita bisa menggunakan function context.WithDeadline(parent, time)

About


Languages

Language:Go 100.0%