package main
import (
"log"
"time"
)
var name string
func main() {
name = "小明"
go printName()
go printName()
time.Sleep(time.Second)
name = "小红"
go printName()
go printName()
time.Sleep(time.Second)
}
func printName() {
log.Println("name is", name)
}
运行程序,可以得到类似输出结果:
2018/03/23 14:53:28 name is 小明
2018/03/23 14:53:28 name is 小明
2018/03/23 14:53:29 name is 小红
2018/03/23 14:53:29 name is 小红
可以看到在两个 goroutine 中我们都可以访问 name 这个变量,当修改它后,在不同的 goroutine 中都可以同时获取到最新的值。
这就是一个最简单的通过共享变量(内存)的方式在多个 goroutine 进行通信的方式。
下面再来看一个例子:
package main
import (
"fmt"
"sync"
)
func main() {
var (
wg sync.WaitGroup
numbers []int
)
for i := 0; i < 10; i++ {
wg.Add(1)
go func(i int) {
numbers = append(numbers, i)
wg.Done()
}(i)
}
wg.Wait()
fmt.Println("The numbers is", numbers)
}