golang select

使用場(chǎng)景

  select主要用來(lái)監(jiān)控多個(gè)channel陌宿,channel的數(shù)據(jù)讀取染服,寫(xiě)入懒浮,關(guān)閉等事件,采用的是輪訓(xùn)算法

監(jiān)控事件

   channel讀取事件
   channel的寫(xiě)入事件
   channel關(guān)閉事件
   其他default

讀取事件

func addNumberToChan(chanName chan int) {
for {
    chanName <- 1
    time.Sleep(1 * time.Second)
}
}
// select 監(jiān)控channel的push事件
  func testReadChannel()  {
var chan1 = make(chan int, 10)
var chan2 = make(chan int, 10)
go addNumberToChan(chan1)
go addNumberToChan(chan2)
for {
    select {
    case e := <- chan1 :
        fmt.Printf("Get element from chan1: %d\n", e)
    case e := <- chan2 :
        fmt.Printf("Get element from chan2: %d\n", e)
    default:
        fmt.Printf("No element in chan1 and chan2.\n")
        time.Sleep(1 * time.Second)
    }
}
}

寫(xiě)入事件

 func testAddChannel()  {
   var chan1 = make(chan int, 10)
   var chan2 = make(chan int, 10)

    chan1 <- 1
    chan2 <- 0
//go addNumberToChan(chan1)
//go addNumberToChan(chan2)

for {
    select {
    case chan1 <- 1 :
        fmt.Printf("Get element from chan1: 1")
    case chan2 <- 0 :
        fmt.Printf("Get element from chan2: 0")
    default:
        fmt.Printf("No element in chan1 and chan2.\n")
        time.Sleep(1 * time.Second)
    }
}

}

PS:注意select語(yǔ)句如果做監(jiān)聽(tīng)使用的話(huà)榄笙,盡量嵌套在for循環(huán)中邪狞,因?yàn)閱为?dú)的select是阻塞的,并且是又返回值的茅撞,eg:

   func server1(ch chan string) {
time.Sleep(1 * time.Second)
ch <- "from server1"
   }
   func server2(ch chan string) {
time.Sleep(1 * time.Second)
ch <- "from server2"

   }
   func main() {
output1 := make(chan string,1)
output2 := make(chan string,1)
go server1(output1)
go server2(output2)
select {
case s1 := <-output1:
    fmt.Println(s1)
case s2 := <-output2:
    fmt.Println(s2)
    }

這個(gè)程序的結(jié)果要么是“from server1”或者“from server2”帆卓,因?yàn)閟elect讀取到一個(gè)數(shù)據(jù)后就返回了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市米丘,隨后出現(xiàn)的幾起案子剑令,更是在濱河造成了極大的恐慌,老刑警劉巖拄查,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吁津,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡堕扶,警方通過(guò)查閱死者的電腦和手機(jī)碍脏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)稍算,“玉大人典尾,你說(shuō)我怎么就攤上這事『剑” “怎么了钾埂?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)科平。 經(jīng)常有香客問(wèn)我褥紫,道長(zhǎng),這世上最難降的妖魔是什么匠抗? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任故源,我火速辦了婚禮,結(jié)果婚禮上汞贸,老公的妹妹穿的比我還像新娘。我一直安慰自己印机,他們只是感情好矢腻,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著射赛,像睡著了一般多柑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上楣责,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天竣灌,我揣著相機(jī)與錄音聂沙,去河邊找鬼。 笑死初嘹,一個(gè)胖子當(dāng)著我的面吹牛及汉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播屯烦,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼坷随,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了驻龟?” 一聲冷哼從身側(cè)響起温眉,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎翁狐,沒(méi)想到半個(gè)月后类溢,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡露懒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年闯冷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片隐锭。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡窃躲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出钦睡,到底是詐尸還是另有隱情蒂窒,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布荞怒,位于F島的核電站洒琢,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏褐桌。R本人自食惡果不足惜衰抑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望荧嵌。 院中可真熱鬧呛踊,春花似錦、人聲如沸啦撮。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)赃春。三九已至愉择,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锥涕。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工衷戈, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人层坠。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓殖妇,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親窿春。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拉一,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 24. Select 什么是 select? select 語(yǔ)句用于在多個(gè)發(fā)送/接收信道操作中進(jìn)行選擇旧乞。selec...
    瀧汰泱閱讀 63評(píng)論 0 0
  • select是go語(yǔ)言中常用的一個(gè)關(guān)鍵字蔚润,其用法也一直被用作面試題來(lái)考核應(yīng)聘者。今天尺栖,結(jié)合代碼來(lái)分析下select...
    WallisW閱讀 79,157評(píng)論 10 27
  • 本文是《Go系列教程》的第二十一篇文章嫡纠。 什么是select ? select語(yǔ)句是用于從多個(gè)發(fā)送/接收的通道操作...
    大風(fēng)過(guò)崗閱讀 230評(píng)論 0 0
  • select 概念 select 應(yīng)用場(chǎng)景 死鎖 select 重要特性 select 概念 select 語(yǔ)句用...
    酷走天涯閱讀 81評(píng)論 0 0
  • Java基礎(chǔ): Spring是如何解決循環(huán)依賴(lài)的問(wèn)題的延赌?比如A autowired B除盏,Bautowired A,...
    小白菜aaa閱讀 934評(píng)論 0 0