Go语法 - Goroutines

123 阅读1分钟

Goroutine

  • go func(x)

channels

  • declare:
    • var chan_name chan chan_type
    • chan_name := make(chan chan_type)
  • send and receive data
channel <- data //write
data := <- channel //read 
  • buffered channels:
ch := make(chan int, 100)
  • unidirectional channel
sendch := make(chan<- int)
  • closing channels in range loop
v, ok := <-ch //ok is false if no more data received

for i := range c{
    //stop when closed
}
  • select:
    • blocked until one of the channels is ready
    • forever not ready, deadlock
    • if multiple are ready, randomly choose
    • non-blocking: default
select{
    case :
    //default :
}
  • deadlock