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 akan bisa mengirim 2 data.
Untuk mengatasi hal ini, di dalam channel ada yang namanya buffer, jadi kita bisa menambahkan buffer di dalam channel atau istilahnya buffered channel, jadi fitur ini adalah buffer yang digunakan untuk menampung data di dalam channel.
Buffer capacity
Di dalam buffer itu capacity, jadi buffer itu istilahnya seperti penyimpanan yang di dalam channel dan dia punya capacity nya. kita bebas memasukkan berapa jumlah kapasitas antrian di dalam buffer, misal jika kita set buffer nya 5 maka kita bisa menerima 5 data di buffer, artinya channel tersebut bisa menerima data sebanyak 5. Jika kita mengirim data ke 6, maka kita diminta menunggu sampai buffer nya ada yang kosong. Ini cocok sekali jika kita memiliki goroutine yang menerima data lebih lambat dari pada yang mengirim data.
Untuk membuat buffer kita bisa menggunakan make
seperti sebelumnya hanya saja akan sedikit berbeda seperti ini make(chan string, JumLahBuffer)
, untuk lebih detail coba buat unit test seperti berikut
package belajar_golang_goroutines
import (
"fmt"
"testing"
"time"
)
func TestBufferedChannel(t *testing.T) {
channel := make(chan string, 2)
defer close(channel)
go func() {
channel <- "Rendy"
channel <- "Wijaya"
}()
go func() {
fmt.Println(<-channel)
fmt.Println(<-channel)
}()
time.Sleep(2 * time.Second)
fmt.Println("Selesai")
}

Pada unit test diatas kita membuat channel seperti biasa tetapi kita juga mengatur buffer nya menjadi 2, oleh karena iu saat di baris 14 & 15 yang menambah data ke channel tidak terjadi error karena datanya di tampung pada buffer.
Penutup
Pada artikel kali ini kita telah belajar tentang buffered channel pada bahasa pemrogaman go. Dan pada artikel selanjutnya saya akan membahas range channel pada bahasa pemrogaman go.