我在從兩個(gè)通道接收的 go 例程中有一個(gè) select 語句。for { fmt.Printf("Waiting for select statement ...\n") select { case req := <-requestChan: fmt.Printf("I got a request: %v\n", req) case <-doneChan: fmt.Printf("serveDatabase: Got closing signal. Stop serving.\n") return }}如果調(diào)用函數(shù)發(fā)送到第一個(gè)通道兩次,然后發(fā)送到第二個(gè)通道,一切正常:requestChan <- Db_request{ request: "Login", beehive: "yaylaswiese" }requestChan <- Db_request{ request: "Signup", beehive: "aziz nezir" }fmt.Printf("Sending true to the doneChannel\n")doneChan <- true控制臺(tái)輸出(正確)是:> Waiting for select statement ...> I got a request: {Login yaylaswiese}> Waiting for select statement ...> Sending true to the doneChannel> I got a request: {Signup aziz nezir}> Waiting for select statement ...> serveDatabase: Got closing signal. Stop serving.但是,如果我評(píng)論第二個(gè)請(qǐng)求,例如requestChan <- Db_request{ request: "Login", beehive: "yaylaswiese" }// requestChan <- Db_request{ request: "Signup", beehive: "aziz nezir" }fmt.Printf("Sending true to the doneChannel\n")doneChan <- true然后輸出是> Waiting for select statement ...> I got a request: {Login yaylaswiese}> Waiting for select statement ...> Sending true to the doneChannel所以doneChan 永遠(yuǎn)不會(huì)收到。我也嘗試在發(fā)送 doneChan 后進(jìn)入無限循環(huán),但結(jié)果相同。那可能是什么?
golang:select 語句中的通道有時(shí)只接收(???)
幕布斯7119047
2021-09-10 21:33:02