Channel Buffering {26/100}

Pramesti Hatta K.
2 min readAug 23, 2016

--

Secara default channel bersifat unbuffered, Yang berarti sebuah channel hanya bisa menerima ( nama_channel <- ) value apabila value di dalamnya sudah di kirim ( <-nama_channel ) ke Goroutine/variable lain.

https://www.goinggo.net/2014/02/the-nature-of-channels-in-go.html

Sementara itu, buffered channel bisa menerima value walaupun masih ada value di dalamnya, tetapi jumlah value yang bisa diterima harus sesuai dengan kapasitas yang sudah di deklarasikan

https://www.goinggo.net/2014/02/the-nature-of-channels-in-go.html

Apabila jumlah kapasitas sudah terpenuhi, maka buffered channel harus melepaskan satu value untuk bisa menerima value yang baru.

Berikut contoh sederhana dari buffered channel

package mainimport (
"fmt"
)
func main() {
messages := make(chan string, 3)
messages <- "buffered 3"
messages <- "buffered 2"
messages <- "buffered 1"
fmt.Println(<-messages)
fmt.Println(<-messages)
fmt.Println(<-messages)
}

Dari contoh diatas kita membuat channel message dengan kapasitas buffer sebesar 3 buah, selanjutnya kita mengisi channel messages dengan 3 buah value yaitu “buffered 3, buffered 2, buffered 1”.

Hal ini bisa terjadi karna kita menggunakan buffered channel, apabila kita menggunakan channel biasa maka hal seperti ini tidak akan bisa dilakukan.

Perbedaan antara channel biasa dengan buffered channel ada pada saat pendeklarasiannya,

Channel biasa

nama_channel = make(chan tipe_channel)

Buffered channel

nama_channel = make(chan tipe_channel, kapasitas_channel)

--

--