关注小众语言、AI技术,记录、分享技术点滴!

0%

go语言的协程和通道通信

许式伟的《go语言编程》,有一个简单的例子,描述go协程和通信通道chan。挺优美的。如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@localhost test]$ cat sum.go
package main

import "fmt"

func sum(values []int, myChan chan int) {
sum := 0
for _, value := range values {
sum += value
}
myChan <- sum
}

func main() {
myChan := make(chan int, 2)

values := []int{1, 2, 3, 5, 5, 4}
go sum(values, myChan) //协程1
go sum(values[:3], myChan) //协程2

sum1, sum2 := <-myChan, <-myChan
fmt.Println("Result:", sum1, sum2, sum1+sum2)
}

结果:

1
2
[root@localhost test]$ go run sum.go
Result: 6 20 26