go語(yǔ)言go?func(){select{}}()的用法
本文主要介紹了go語(yǔ)言go func(){select{}}()的用法,具體如下:
go func(){
select{
......
}
}()
是使用Goroutine和Channel的一個(gè)例子,也是Go語(yǔ)言中異步編程的標(biāo)志之一。
具體來(lái)說(shuō),這段代碼創(chuàng)建了一個(gè)無(wú)限循環(huán),然后使用select關(guān)鍵字監(jiān)控任意數(shù)量的channel,一旦其中有一個(gè)channel準(zhǔn)備好了,就會(huì)執(zhí)行其對(duì)應(yīng)的代碼塊。
這種代碼模式可以幫助實(shí)現(xiàn)高效的事件循環(huán),在同時(shí)處理多個(gè)事件的情況下保持高效且不卡住整個(gè)程序,很適合在高并發(fā)、網(wǎng)絡(luò)編程等場(chǎng)景中使用。
package main
import (
"fmt"
"time"
)
func main() {
ch1 := make(chan string)
ch2 := make(chan string)
go func() {
for {
select {
case msg1 := <-ch1:
fmt.Println("Received message from ch1: ", msg1)
case msg2 := <-ch2:
fmt.Println("Received message from ch2: ", msg2)
case <-time.After(time.Millisecond * 500):
fmt.Println("Timed out!")
}
}
}()
ch1 <- "來(lái)自 channel-1 的消息"
time.Sleep(time.Second)
ch2 <- "來(lái)自 channel-2 的消息"
time.Sleep(time.Second)
ch1 <- "另一個(gè)來(lái)自 channel-1 的消息"
time.Sleep(time.Second * 2)
}
運(yùn)行結(jié)果
Received message from ch1: 來(lái)自 channel-1 的消息
Timed out!
Received message from ch2: 來(lái)自 channel-2 的消息
Timed out!
Timed out!
Received message from ch1: 另一個(gè)來(lái)自 channel-1 的消息
Timed out!
Timed out!
Timed out!
到此這篇關(guān)于go語(yǔ)言go func(){select{}}()的用法的文章就介紹到這了,更多相關(guān)go func(){select{}}()內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang 定時(shí)器的終止與重置實(shí)現(xiàn)
在實(shí)際開(kāi)發(fā)過(guò)程中,我們有時(shí)候需要編寫(xiě)一些定時(shí)任務(wù)。很多人都熟悉定時(shí)器的使用,那么定時(shí)器應(yīng)該如何終止與重置,下面我們就一起來(lái)了解一下2021-08-08
Golang實(shí)現(xiàn)Json轉(zhuǎn)結(jié)構(gòu)體的示例詳解
這篇文章主要為大家詳細(xì)介紹了Golang實(shí)現(xiàn)Json轉(zhuǎn)結(jié)構(gòu)體的方法,文中的示例代碼講解詳細(xì),對(duì)學(xué)習(xí)Go語(yǔ)言有一定的幫助,需要的可以參考一下2023-02-02

