我目前正在關(guān)注本教程http://www.miek.nl/files/go/20120807-go.pdf,并在第7章中討論了渠道/ goroutines但是,示例代碼在運(yùn)行后立即對(duì)我拋出錯(cuò)誤。package mainimport ( "fmt" "time")var c chan intfunc 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}這是執(zhí)行代碼時(shí)的輸出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 +0xeegoroutine 2 [syscall]:created by runtime.main /build/buildd/golang-1/src/pkg/runtime/proc.c:221goroutine 3 [chan send (nil chan)]:main.ready(0x80bb0d4, 0x3, 0x2, 0x0) /home/daniel/Dropbox/code/go/goroutines.go:13 +0xe5created by main.main /home/daniel/Dropbox/code/go/goroutines.go:18 +0x5egoroutine 4 [chan send (nil chan)]:main.ready(0x80bba30, 0x6, 0x1, 0x0) /home/daniel/Dropbox/code/go/goroutines.go:13 +0xe5created by main.main /home/daniel/Dropbox/code/go/goroutines.go:19 +0x80goroutine 5 [timer goroutine (idle)]:created by addtimer /build/buildd/golang-1/src/pkg/runtime/ztime_386.c:69exit status 2我的代碼有問題嗎?
1 回答

弒天下
TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊
是的,只是一個(gè)錯(cuò)字:
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) // previously c := make(chan int)
go ready("Tea", 2)
go ready("Coffee", 1)
fmt.Println("Waiting...")
<-c
<-c
}
main()c因?yàn)樗暶髁艘粋€(gè)新的全局變量,所以沒有使用它。
請(qǐng)注意,您不必main()在聲明以下內(nèi)容的內(nèi)部創(chuàng)建頻道:
var c = make(chan int)
- 1 回答
- 0 關(guān)注
- 227 瀏覽
添加回答
舉報(bào)
0/150
提交
取消