Context merupakan sebuah data yang isinya membawa value, sinyal cancel, sinyal timeout dan sinyal deadline. Context biasanya dibuat per request(misal setiap ada request masuk ke server melalui http request), context digunakan untuk mempermudah kita meneruskan value, dan sinyal antar proses. Kenapa context perlu dipelajari Context di golang biasa digunakan untuk mengirim data request atau sinyal ke proses lain atau dari gorutine ke goroutine yang lain. Dengan menggunakan context, ketika kita ingin membatalkan sebuah proses, kita cukup mengirim sinyal ke context …
Month: August 2022
Sebelumnya diawal kita sudah bahas bahwa goroutine itu sebenarnya dijalankan di dalam thread, pertanyaannya seberapa banyak thread yang ada di golang ketika aplikasi kita berjalan ? Untuk mengetahui berapa jumlah thread, kita bisa menggunakan GOMAXPROCS, yaitu sebuah function di package runtime yang bisa kita gunakan untuk mengubah atau mengambil jumlah thread. Secara default, jumlah thread di golang itu sebanyak jumlah cpu di komputer kita. Kita juga bisa melihat jumlah cpu dengan menggunakan function runtime.NumCpu(). Pada contoh diatas kita membuat 100 …
Timer adalah representasi suatu kejadian, ketika waktu timer sudah expired, maka event akan dikirim ke dalam channel, untuk membuat timer kita bisa menggunakan time.NewTimer(duration). Kode : Timer Jadi pada contoh diatas kita membuat timer pada baris 10 selama 5 detik, kemudian kita menunggu data dikirim ke channel di baris 13, sesuai yang dibuat sebelumnya harus nya data akan masuk ke channel setelah 5 detik. time.After Kadang kita hanya butuh channel nya saja, tidak membutuhkan data Timer nya, untuk melakukan hal …
Sekarang kita akan membahas salah satu masalah yang sering terjadi dalam concurency atau pararell programming yaitu race condition, saat kita menggunakan goroutine dia tidak hanya berjalan secara concurrent tetapi bisa pararell juga, karena bisa pararell maka akan ada beberapa thread yang berjalan secara pararell. Hal ini sangat berbahaya ketika kita melakukan manipulasi data variable yang sama atau istilah nya sharing variable, jadi ada satu variable yang diakses oleh beberapa goroutine di waktu yang sama. Hal ini bisa menyebabkan masalah yang …
Kadang ada kasus dimana kita membuat beberapa channel, dan menjalankan beberapa goroutine untuk tiap channel nya, lalu kita ingin mendapatkan data dari channel tersebut, nah jika kita menggunakan perulangan for range maka akan ribet karena itu hanya bisa digunakan untuk satu channel. Untuk melakukan hal tersebut kita bisa menggunakan select channel yang ada di golang, dengan menggunakan select channel kita bisa memilih data tercepat dari beberapa channel, jika data datang secara bersamaan maka akan diambil terlebih dahulu secara random salah …
Terkadang terdapat kasus dimana channel dikirim data secara terus menerus oleh pengirim nya, dan kadang tidak jelas kapan pengirim tersebut berhenti menerima data. Salah satu yang bisa kita lakukan adalah dengan menggunakan perulangan range ketika menerima data dari channel, ketika sebuah channel di close maka secara otomatis perulangan tersebut akan berhenti. Ini lebih sederhana dari pada kita melakukan pengecekan channel secara manual. Kode program range channel Untuk lebih jelas perhatikan contoh kode program berikut ini Pada baris kode diatas, seperti …
Seperti yang dijelaskan pada artikel sebelum-sebelumnya bahwa channel itu hanya bisa menerima 1 data, artinya jika kita menambahkan data ke 2 maka kita disuruh menunggu sampai data ke 1 ada yang mengambil. Tetapi terkadang ada kasus dimana pengirim lebih cepat dibandingkan penerima, dalam hal ini jika kita menggunakan channel maka otomatis pengirim akan ikut lambat juga, conothnya misalnya pengirim dalam 1 detik mengirim 2 data tetapi ternyata penerima hanya bisa mengambil 1 data dalam 1 detik maka otomatis pengirim tidak …
Saat kita mengirim channel ke sebuah parameter, isi function tersebut bisa mengirim atau menerima data dari channel tersebut, kadang kita ingin memberi tahu terhadap sebuah function misalnya bahwa channel tersebut hanya digunakan untuk mengirim saja, atau bisa digunakan hanya untuk menerima data dari channel saja. Hal ini bisa kita lakukan di parameter dengan cara menandai apakah channel ini digunakan untuk in(mengirim data) out(menerima data). Baris kode channel in & out Seperti biasa kita akan mencoba dengan unit test, jadi silakan …
Dalam kenyataannya saat membuat aplikasi, sering kita akan mengirim channel ke function lain via parameter, sebelumnya kita sudah mencoba menggunakan anonymous function nah sebenarnya nanti kita akan jarang sekali menggunakan anonymous function. Nantinya di kenyataannya kita akan membuat sebuah function dan menggunakan parameter untuk mengiim channel nya. Sebelumnya kita sudah tau jika di golang by default, parameter adalah pass by value, artinya value akan di duplikasi lalu dikirim ke function parameter, sehingga jika kita ingin mengirim data asli, kita biasa …
Channel adalah tempat komunikasi secara synchronous yang bisa dilakukan oleh goroutine, seperti yang kita tau jika kita membuat function dengan return value dan menjalankan function tersebut dengan goroutine maka data nya tidak akan bisa diterima. Nah bagaimana cara nya jika kita membutuhkan return value dari sebuah goroutine, untuk masalah ini kita bisa menggunakan channel. Jadi channel ini adalah tempat komunikasi secara synchronous dari dua atau lebih goroutine, jadi jika kita ingin mengirim data dari goroutine ke goroutine yang lain maka …
Social Profiles