Buffered Channel

Default channel hanya bisa menerima 1 data -> jika ditambah data ke-2, maka kita akan diminta menunggu sampai data ke-1 ada yang mengambil.

Kadang-kadang ada kasus dimana pengirim lebih cepat dibanding penerima, dalam hal ini jika kita menggunakan channel, maka otomatis pengirim akan ikut lambat juga.

Buffered Channel -> buffer yang bisa digunakan untuk menampung data antrian di Channel.

Buffer Capacity

Jika di set misal 5, artinya channel bisa menerima 5 data di buffer.

Jika dikirim data ke 6, maka kita diminta untuk menunggu sampai buffer ada yang kosong. Buffer channel cocok digunakan apabila goroutine yang menerima data lebih lambat dari yang mengirim data

package main

import (
	"fmt"
	"time"
)

func write(ch chan int) {
	for i := 0; i < 20; i++ {
	        // write value
	        ch <- i
	        fmt.Printf("write%d ", i)
	}
	close(ch)
}

func main() {
	ch := make(chan int, 12)

	go write(ch)

    	for i := range ch {
        	// read value
        	fmt.Printf("%d ", i)
		time.Sleep(700 * time.Millisecond)
	}
}
write0 write1 write2 write3 write4 write5 write6 write7 write8 write9 write10 0 1 write11 2 write12 write13 3 4 write14 5 write15 6 write16 7 write17 8 write18 9 write19 10 11 12 13 
14 15 16 17 18 19 

Last updated