You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
ch := make(chan int) // create a channel of type int
|
|
|
|
ch <- 42 // Send a value to the channel ch.
|
|
|
|
v := <-ch // Receive a value from ch
|
|
|
|
|
|
|
|
// Create a buffered channel.
|
|
|
|
// Writing to a buffered channels does not block
|
|
|
|
// if less than <buffer size> unread values have been written.
|
|
|
|
ch := make(chan int, 100)
|
|
|
|
// Non-buffered channels block.
|
|
|
|
// Read blocks when no value is available,
|
|
|
|
// write blocks if a value already has been written but not read.
|
|
|
|
|
|
|
|
close(ch) // closes the channel (only sender should close)
|
|
|
|
|
|
|
|
// read from channel and test if it has been closed
|
|
|
|
v, ok := <-ch
|
|
|
|
// if ok is false, channel has been closed
|
|
|
|
|
|
|
|
// Read from channel until it is closed
|
|
|
|
for i := range ch {
|
|
|
|
fmt.Println(i)
|
|
|
|
}
|
|
|
|
|
|
|
|
// select blocks on multiple channel operations,
|
|
|
|
// if one unblocks, the corresponding case is executed
|
|
|
|
func doStuff(channelOut, channelIn chan int) {
|
|
|
|
select {
|
|
|
|
case channelOut <- 42:
|
|
|
|
fmt.Println("We could write to channelOut!")
|
|
|
|
case x := <- channelIn:
|
|
|
|
fmt.Println("We could read from channelIn")
|
|
|
|
case <-time.After(time.Second * 1):
|
|
|
|
fmt.Println("timeout")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|