假设我有以下代码(操场):
package main
import (
"fmt"
"sync"
)
func createStr() *string {
tmp := "foo"
return &tmp
}
func main() {
var (
s *string
wg sync.WaitGroup
)
go func() {
wg.Add(1)
defer wg.Done()
s = createStr()
}()
wg.Wait()
fmt.Printf("s after: %v", s)
}
我本来期望 s 不等于 nil。
但是,如果我添加一个小等待,我会得到 s != nil ( playground ):
package main
import (
"fmt"
"sync"
"time"
)
func createStr() *string {
tmp := "foo"
return &tmp
}
func main() {
var (
s *string
wg sync.WaitGroup
)
go func() {
wg.Add(1)
defer wg.Done()
s = createStr()
}()
wg.Wait()
time.Sleep(time.Second)
fmt.Printf("s after: %v", s)
}
这只是在我编写的程序中造成了一个错误。发生了什么并sync.WaitGroup没有导致我的程序等待 s 在我的 go func 中被分配一个字符串指针?
墨色风雨
相关分类