Go dengan Contoh: Kanal (Channels)

Kanal (Channel) adalah sebuah pipa yang menghubunngkan beberapa gorutin. Kamu bisa mengirimkan nilai ke kanal dari satu gorutin dan menerima nilai tersebut di gorutin lainnya.

package main
import "fmt"
func main() {

Buat sebuah kanal baru dengan make(chan tipe). Kanal digolongkan oleh tipe yang dia bawa.

    pesan := make(chan string)

Kirim sebuah nilai ke kanal dengan sintaks channel <-. Di sini kita mengirim "ping" ke kanal pesan yang kita buat di atas dari gorutin baru.

    go func() { pesan <- "ping" }()

Sintaks <-channel menerima sebuah nilai dari kanal. Di sini kita akan menerima pesan "ping" yang kita kirim di atas dan mencetaknya.

    psn := <-pesan
    fmt.Println(psn)
}

Saat kita menjalankan program pesan "ping" sukses terkirim dari satu gorutin ke gorutin lainnya melalui kanal kita.

$ go run channels.go 
ping

Normalnya pengiriman dan penerimaan akan terhambat sampai kedua pengirim dan penerima siap. Sifat ini memungkinkan kita untuk menunggu pada akhir program untuk pesan "ping" tanpa harus menggunakan sistem sinkronisasi lain.

Contoh selanjutnya: Kanal dengan Penyangga (Channel Buffering).