Buffered Channels

for value := range ch{
    ...
}
  • Iterator over values received from a channel.
  • Loop automatically breaks, when a channel is closed.
  • Range does not return the second boolean value.

Unbuffered Channels

  • Synchronous ch := make(chan T) Image

Buffered Channels

  • Asynchronous
  • Channels are given capacity
  • in-memory FIFO queue

ch := make(chan T, capacity) Image

Exercises

Range

https://go.dev/play/p/o535FRB4mV8

package main

import "fmt"

func main() {
    ch := make(chan int)
    go func() {
        for i := 0; i < 6; i++ {
            // send iterator over channel
            ch <- i
        }
        close(ch)
    }()

    // range over channel to recv values
    for value := range ch {
        fmt.Println(value)
    }
}
0
1
2
3
4
5

Buffered Channels

https://go.dev/play/p/rg1tmIAi8HX

package main

import (
    "fmt"
)

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

    go func() {
        defer close(ch)

        // send all iterator values on channel without blocking
        for i := 0; i < 6; i++ {
            fmt.Printf("Sending: %d\n", i)
            ch <- i
        }
    }()

    for v := range ch {
        fmt.Printf("Received: %v\n", v)
    }
}
Sending: 0
Sending: 1
Sending: 2
Sending: 3
Sending: 4
Received: 0
Received: 1
Received: 2
Received: 3
Received: 4
Sending: 5
Received: 5
© Kimi Tsai all right reserved.            Updated : 2023-07-12 09:04:54

results matching ""

    No results matching ""

    results matching ""

      No results matching ""