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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

其他案例調(diào)用的golang案例不執(zhí)行但返回

其他案例調(diào)用的golang案例不執(zhí)行但返回

Go
九州編程 2022-05-10 17:07:38
為什么Stopped不打印出來(lái),main而是返回?package mainimport (    "fmt"    "time")func main() {    tick := time.Tick(100 * time.Millisecond)    boom := time.After(500 * time.Millisecond)    var stop chan int = make(chan int)    for {        select {        case <- stop:            fmt.Println("Stopped!")        case <-tick:            fmt.Println("tick.")        case <-boom:            fmt.Println("BOOM!")            stop <- 0        default:            fmt.Println("    .")            time.Sleep(50 * time.Millisecond)        }    }}輸出:   .    .tick.    .    .tick.    .    .tick.    .    .tick.    .    .tick.BOOM!預(yù)計(jì):   .    .tick.    .    .tick.    .    .tick.    .    .tick.    .    .tick.BOOM!Stopped!
查看完整描述

3 回答

?
MYYA

TA貢獻(xiàn)1868條經(jīng)驗(yàn) 獲得超4個(gè)贊

 這行得通。


package main


import (

    "fmt"

    "time"

)


func main() {

    tick := time.Tick(100 * time.Millisecond)

    boom := time.After(500 * time.Millisecond)

    stop := make(chan int)

    for {

        select {

        case <-stop:

            fmt.Println("Stopped!")

            return

        case <-tick:

            fmt.Println("tick.")

        case <-boom:

            fmt.Println("BOOM!")

            close(stop)

        default:

            fmt.Println("    .")

            time.Sleep(50 * time.Millisecond)

        }

    }

}

輸出如下。


tick.

    .

    .

tick.

    .

    .

tick.

    .

    .

tick.

BOOM!

Stopped!


查看完整回答
反對(duì) 回復(fù) 2022-05-10
?
瀟湘沐

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊

Go 編程語(yǔ)言規(guī)范說(shuō)明了關(guān)于發(fā)送到頻道的以下內(nèi)容:

通信阻塞,直到發(fā)送可以繼續(xù)。如果接收器準(zhǔn)備好,則可以在無(wú)緩沖通道上進(jìn)行發(fā)送。如果緩沖區(qū)中有空間,則可以繼續(xù)緩沖通道上的發(fā)送。

因此,當(dāng)您的代碼到達(dá)stop <- 0它時(shí),會(huì)阻塞等待另一個(gè) goroutine 從通道中讀取,而這永遠(yuǎn)不會(huì)發(fā)生(您case <- stop:在同一個(gè) go 例程中,因此不活動(dòng))。

有幾種方法可以解決這個(gè)問(wèn)題:

  1. 使用緩沖通道(例如stop := make(chan int, 1))。

  2. 在另一個(gè) go 例程中等待停止(示例

  3. 關(guān)閉頻道而不是向其發(fā)送內(nèi)容 ( close(stop))。

注意:由于您的應(yīng)用程序的編寫方式,這些選項(xiàng)都不會(huì)真正停止它,因?yàn)槟?for 循環(huán)永遠(yuǎn)不會(huì)退出(添加breakreturn退出)。


查看完整回答
反對(duì) 回復(fù) 2022-05-10
?
慕姐4208626

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超7個(gè)贊

當(dāng) BOOM 發(fā)生時(shí),主 goroutine 會(huì)等待寫入停止通道。但是沒(méi)有其他 goroutine 等待從中讀取,所以這是一個(gè)死鎖。

如果您使停止通道成為容量為 1 的緩沖通道,那么它將能夠?qū)懭胨⑶蚁乱淮蔚鷮⒆x取。或者干脆關(guān)閉頻道。


查看完整回答
反對(duì) 回復(fù) 2022-05-10
  • 3 回答
  • 0 關(guān)注
  • 197 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

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