Channel
Pada sesi ini kita masih membahas tentang concurrency pada Go yaitu channel
Channel adalah tipe data yang dapat membuat Goroutine saling bertukar informasi atau saling berkomunikasi (send and receive). Channel juga membuat Goroutine menjadi Blocking dan Synchronized.
Untuk membuat sebuah Channel, kita dapat menggunakan make
seperti berikut ini:
atau
Operator yang digunakan untuk mengirim dan menerima nilai dengan Channel menggunakan <-
:
Studi Kasus #1
Pada studi kasus pertama kita akan membuat 1 buah fungsi untuk menghitung total numbers dari slice
. Lalu membuat 1 buah fungsi sebagai main
. Dua fungsi tersebut akan kita anggap sebagai Goroutines.
Fungsi main
secara implisit juga termasuk Goroutines
Pada kode di atas fungsi sum
berperan sebagai goroutine yang mengirim data melalui Channel. Ini ditandai dengan penggunaan operator c <- sum
.
Sementara itu fungsi main
berperan sebagai goroutine yang menerima nilai melalui Channel. Ini ditandai dengan penggunaan operator x, y := <-c, <-c
.
Kita bisa lihat dari output proses yang terjadi adalah:
Ini membuktikan bahwa goroutines berjalan Asynchronous.
Namun proses Channel bersifat Synchronous. Ini bisa dilihat bahwa program akan menunggu proses nilai yang dikirim melalui Channel selesai terlebih dahulu yaitu:
baru menjalankan proses di bawahnya:
Jadi Channel dapat menjadikan proses Goroutine menjadi Synchronous.
Studi Kasus #2
Pada studi kasus ke-2 ini kita akan membuat 2 fungsi secara independen yang berperan sebagai pengirim dan penerima nilai melalui Channel. Kita hanya menjadikan fungsi main
sebagai tempat memanggil goroutine.
Pada kode di atas kita bisa melihat bahwa pada fungsi main
, kita menggunakan bantuan fmt.Scanln
untuk blocking program karena kemungkinan fungsi yang dijalankan sebagai goroutine selesai lebih lama daripada program di dalam fungsi main
.
Last updated