main.go 926 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package main
  2. import (
  3. "fmt"
  4. "time"
  5. )
  6. func sayHello() {
  7. for i := 0; i < 5; i++ {
  8. fmt.Println("Hello")
  9. time.Sleep(100 * time.Millisecond)
  10. }
  11. }
  12. func sum(s []int, c chan int) {
  13. sum := 0
  14. for _, v := range s {
  15. sum += v
  16. }
  17. c <- sum // 把 sum 发送到通道 c
  18. }
  19. func main() {
  20. go sayHello() // 启动 Goroutine
  21. for i := 0; i < 5; i++ {
  22. fmt.Println("Main")
  23. time.Sleep(100 * time.Millisecond)
  24. }
  25. // 无缓冲通道
  26. s := []int{7, 2, 8, -9, 4, 0}
  27. c := make(chan int)
  28. go sum(s[:len(s)/2], c)
  29. go sum(s[len(s)/2:], c)
  30. x, y := <-c, <-c
  31. fmt.Println(x, y, x+y)
  32. // 有缓冲通道
  33. // 这里我们定义了一个可以存储整数类型的带缓冲通道
  34. // 缓冲区大小为2
  35. ch := make(chan int, 2)
  36. // 因为 ch 是带缓冲的通道,我们可以同时发送两个数据
  37. // 而不用立刻需要去同步读取数据
  38. ch <- 1
  39. ch <- 2
  40. // 获取这两个数据
  41. fmt.Println(<-ch)
  42. fmt.Println(<-ch)
  43. }