| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- package main
- import (
- "fmt"
- "time"
- )
- func sayHello() {
- for i := 0; i < 5; i++ {
- fmt.Println("Hello")
- time.Sleep(100 * time.Millisecond)
- }
- }
- func sum(s []int, c chan int) {
- sum := 0
- for _, v := range s {
- sum += v
- }
- c <- sum // 把 sum 发送到通道 c
- }
- func main() {
- go sayHello() // 启动 Goroutine
- for i := 0; i < 5; i++ {
- fmt.Println("Main")
- time.Sleep(100 * time.Millisecond)
- }
- // 无缓冲通道
- s := []int{7, 2, 8, -9, 4, 0}
- c := make(chan int)
- go sum(s[:len(s)/2], c)
- go sum(s[len(s)/2:], c)
- x, y := <-c, <-c
- fmt.Println(x, y, x+y)
- // 有缓冲通道
- // 这里我们定义了一个可以存储整数类型的带缓冲通道
- // 缓冲区大小为2
- ch := make(chan int, 2)
- // 因为 ch 是带缓冲的通道,我们可以同时发送两个数据
- // 而不用立刻需要去同步读取数据
- ch <- 1
- ch <- 2
- // 获取这两个数据
- fmt.Println(<-ch)
- fmt.Println(<-ch)
- }
|