第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

去選擇語句

去選擇語句

Go
手掌心 2021-10-25 20:24:42
一個關(guān)于select頻道聲明的簡短節(jié)目。package mainimport "fmt"func fibonacci(c, quit chan int) {    x, y := 0, 1    for {        select {        case c <- x:            x, y = y, x+y        case s := <-quit:            fmt.Println("quit =",s)            return        }    }}func main() {    c := make(chan int)    quit := make(chan int)    go func() {        for i := 0; i < 10; i++ {            fmt.Println(<-c)        }        quit <- 9    }()    fibonacci(c, quit)}上面代碼的結(jié)果:0112358132134quit = 9它工作得很好。但在我改變后(在func fibonacci)case s := <-quit:    fmt.Println("quit =",s)到case <-quit:    fmt.Println(<-quit)發(fā)生了致命錯誤:0112358132134fatal error: all goroutines are asleep - deadlock!goroutine 1 [chan receive]:main.fibonacci(0x18348040, 0x18348080)    /tmp/compile42.go:12 +0xf9main.main()    /tmp/compile42.go:27 +0x11c錯誤從何而來?
查看完整描述

2 回答

?
HUH函數(shù)

TA貢獻1836條經(jīng)驗 獲得超4個贊

在第二種情況下,您將兩次從通道中獲取值。每次執(zhí)行類似 <-channel 之類的操作時,都會從 channel 中彈出一個值。

因此程序無限期地在線等待

fmt.Println(<-quit)

但幸運的是,go 足夠聰明,可以檢測到這種情況,并因錯誤而恐慌“所有 goroutine 都睡著了——死鎖! ”


查看完整回答
反對 回復(fù) 2021-10-25
?
一只斗牛犬

TA貢獻1784條經(jīng)驗 獲得超2個贊

fmt.Println(<-quit)

根據(jù)您擁有的代碼,正在等待通道上的另一個值,該值永遠不會出現(xiàn)。

您必須記住選擇之前的行:

case s := <-quit

已經(jīng)從頻道中刪除了退出值。

因此它永遠不會完成。


查看完整回答
反對 回復(fù) 2021-10-25
  • 2 回答
  • 0 關(guān)注
  • 214 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號