我们来看这样一个问题,在主协程中创建的变量,在子协程中能否使用?来看下面代码:
func main() {
s := "hello"
fmt.Printf("s outside address is %v\n", &s) // 0xc0000101e0
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
s = "world"
fmt.Printf("s inside address is %v\n", &s) // 0xc0000101e0
}()
wg.Wait()
fmt.Println(s)
}
运行结果是 “hello” 还是 “world”,我们运行之后发现是 “world”。查看变量 s 的地址,发现在子协程中的地址和在主协程中的地址是一样的。