通道/ Goroutines抛出错误

我目前正在关注本教程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

我的代码有问题吗?


慕森王
浏览 206回答 1
1回答

弑天下

是的,只是一个错字:package mainimport (&nbsp; &nbsp; "fmt"&nbsp; &nbsp; "time")var c chan intfunc ready(w string, sec int) {&nbsp; &nbsp; time.Sleep(time.Duration(sec) * time.Second)&nbsp; &nbsp; fmt.Println(w, "is ready!")&nbsp; &nbsp; c <- 1}func main() {&nbsp; &nbsp; c = make(chan int) // previously c := make(chan int)&nbsp; &nbsp; go ready("Tea", 2)&nbsp; &nbsp; go ready("Coffee", 1)&nbsp; &nbsp; fmt.Println("Waiting...")&nbsp; &nbsp; <-c&nbsp; &nbsp; <-c}main()c因为它声明了一个新的全局变量,所以没有使用它。请注意,您不必main()在声明以下内容的内部创建频道:var c = make(chan int)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go