【发布时间】:2014-07-22 03:41:17
【问题描述】:
我正在运行以下go code,但它不会产生输出:
package main
import "fmt"
//import "strconv"
import "time"
func Wait(){
time.Sleep(2000 * time.Millisecond)
}
func Print(c chan string){
fmt.Println("Running Print go-routine")
for{
fmt.Println("len(c): ", len(c))
str := <- c
fmt.Println(str)
}
}
func main() {
c := make(chan string, 4)
c <- "0"
c <- "1"
c <- "2"
c <- "3"
Wait()
fmt.Println("Before go Print(c)")
go Print(c)
fmt.Println("After go Print(c)")
}
有死锁吗? Print(c) 函数甚至没有被调用...?这对我来说很奇怪。
Go Playground 中的链接是:http://play.golang.org/p/tDjEJKwkRJ
【问题讨论】:
-
总是使用
go run -race来测试那种代码。 -
您的程序在 Print 有机会打印任何内容之前退出。
标签: concurrency go