goroutine 奉行通过通信来共享内存,而不是共享内存来通信

  1. func main() {
  2. c := make(chan bool)
  3. go func() {
  4. fmt.Println("Go Go Go!!!")
  5. c <- true
  6. close(c)
  7. }()
  8. for v := range c {
  9. }
  10. }

-可处理一个或多个 channel 的发送和接收
-同时有多个可用的 channel是按随机顺序处理
-可用空的 select 来阻塞 main 函数
-可设置超时

  1. func main() {
  2. c := make(chan int)
  3. for v := range c {
  4. fmt.Println(v)
  5. }
  6. }()
  7. for {
  8. select {
  9. case c <- 0:
  10. case c <- 1:
  11. }
  12. }

select 设置超时

  1. var c chan string
  2. i := 0
  3. for {
  4. fmt.Println(<-c)
  5. c <- fmt.Sprintf("From Pingpang: Hi, #%d", i)
  6. i++
  7. }
  8. }
  9. func main() {
  10. c = make(chan string)
  11. go Pingpang()
  12. for i := 0; i < 10; i++ {
  13. c <- fmt.Sprintf("From Pingpang: Hello, #%d", i)
  14. fmt.Println(<-c)
  15. }