【发布时间】:2015-08-11 23:37:06
【问题描述】:
我看了很久以前写的一些代码,当时go1.3发布(我可能错了)。 CODE HERE
以下代码曾经按预期工作,但现在由于我已将 go 更新到当前的主版本(go version devel +bd1efd5 Fri Jul 31 16:11:21 2015 +0000 darwin/amd64),最后输出消息c <- "FUNC 1 DONE" 没有打印,代码在play.golang.org 上正常工作。是我做错了什么,还是这是一个错误?
package main
import ("fmt";"sync";"time")
func test(c chan string, wg *sync.WaitGroup) {
defer wg.Done()
fmt.Println("EXEC FUNC 1")
time.Sleep(3 * time.Second)
c <- "FUNC 1 DONE"
}
func test1(c chan string, wg *sync.WaitGroup) {
defer wg.Done()
fmt.Println("EXEC FUNC 2")
time.Sleep(2 * time.Second)
c <- "FUNC 2 DONE"
}
func main() {
ch := make(chan string)
var wg sync.WaitGroup
wg.Add(2)
go test(ch, &wg)
go test1(ch, &wg)
go func(c chan string) {
for txt := range c {
fmt.Println(txt)
}
}(ch)
wg.Wait()
}
更新:
我不是说,上面是做这些类型工作的最好方法,但我看不出有什么问题。
同样在go version go1.4.2 darwin/amd64 中运行它会返回预期的输出。
【问题讨论】:
标签: go