Channel

Fungsi -> tempat komunikasi data secara synchronous oleh go routine -> saat melakukan pengiriman data, go routine akan terblok sampai ada yang menerima data tersebut (blocking).

Karakteristik -> hanya bisa menerima 1 tipe data, secara default hanya bisa menampung 1 data, jika tidak digunakan harus di close atau bisa menyebabkan memory leak.

Channel In -> Mengirim data

Channel Out -> Menerima data

Sifatnya -> Blocking

Channel harus di close -> jika tidak bisa menyebabkan memory leak

Contoh #1

package main
  
import "fmt"
  
func test(value chan int) {
    // channel out
    result := 100 + <- value
    fmt.Printf("%d ", result)
}

func main() {
    fmt.Println("Start")
    value := make(chan int)

    for i := 0; i < 10; i++ {
        go test(value)
        // channel in
        value <- i
    }
    fmt.Println("\nEnd")
    close(value)
}

Contoh 2

Contoh 3

Channel perlu di close

Channel perlu di close untuk mengindikasikan tidak ada data yang dikirim lagi ke channel

Reference:

Last updated