Channel Buffering {26/100}
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.
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
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)