我目前正在关注本教程http://www.miek.nl/files/go/20120807-go.pdf并在第 7 章讨论了通道/goroutines
但是,示例代码在您运行它之后就向我抛出错误。
package main
import (
"fmt"
"time"
)
var c chan int
func ready(w string, sec int) {
time.Sleep(time.Duration(sec) * time.Second)
fmt.Println(w, "is ready!")
c <- 1
}
func main() {
c := make(chan int)
go ready("Tea", 2)
go ready("Coffee", 1)
fmt.Println("Waiting...")
<-c
<-c
}
这是执行代码时的输出
daniel:go> go run goroutines.go
Waiting...
Coffee is ready!
Tea is ready!
throw: all goroutines are asleep - deadlock!
goroutine 1 [chan receive]:
main.main()
/home/daniel/Dropbox/code/go/goroutines.go:21 +0xee
goroutine 2 [syscall]:
created by runtime.main
/build/buildd/golang-1/src/pkg/runtime/proc.c:221
goroutine 3 [chan send (nil chan)]:
main.ready(0x80bb0d4, 0x3, 0x2, 0x0)
/home/daniel/Dropbox/code/go/goroutines.go:13 +0xe5
created by main.main
/home/daniel/Dropbox/code/go/goroutines.go:18 +0x5e
goroutine 4 [chan send (nil chan)]:
main.ready(0x80bba30, 0x6, 0x1, 0x0)
/home/daniel/Dropbox/code/go/goroutines.go:13 +0xe5
created by main.main
/home/daniel/Dropbox/code/go/goroutines.go:19 +0x80
goroutine 5 [timer goroutine (idle)]:
created by addtimer
/build/buildd/golang-1/src/pkg/runtime/ztime_386.c:69
exit status 2
我的代码有问题吗?
任何帮助,将不胜感激