Nil channels
This section will talk about nil channels, which are a special sort of channel that will always block. The name of the program will be nilChannel.go
and will be presented in four parts.
The first part of the program contains the expected preamble:
package main import ( "fmt" "math/rand" "time" )
The second portion contains the implementation of the addIntegers()
function:
func addIntegers(c chan int) { sum := 0 t := time.NewTimer(time.Second) for { select { case input := <-c: sum = sum + input case <-t.C: c = nil fmt.Println(sum) } } }
The addIntegers()
function stops after the time defined in the time.NewTimer()
function passes and will go to the relevant branch of the case
statement. There, it makes c
a nil channel, which means that the channel will stop receiving new data and that the function will just wait there.
The third part of nilChannel.go
is...