select與switch的區(qū)別

No.1 Select:

select只能用于channel的操作,發(fā)送或接受數(shù)據(jù),如果select有多個(gè)分支滿足條件,他的特點(diǎn)是->隨機(jī)選取其中一個(gè)滿足條件的分支戏羽。

官方解釋如下:
If multiple cases can proceed, a uniform pseudo-random choice is made to decide which single communication will execute.
下面是Concrete Example:
package main

import (
    "fmt"
    "time"
)

func main() {
    c1 := make(chan string)
    c2 := make(chan string)
    go func() {
        time.Sleep(time.Second * 1)
        c1 <- "one"
    }()
    go func() {
        time.Sleep(time.Second * 1)
        c2 <- "two"
    }()

    select {
    case msg1 := <-c1:
        fmt.Println("msg1 received is:", msg1)
    case msg2 := <-c2:
        fmt.Println("msg2 received is:", msg2)
    }

}

雖然代碼中select中2個(gè)分支的條件都是滿足的,但是他不像switch那樣按順序楼吃。大家可以吧代碼復(fù)制了自己測試下始花。

下面來看看我自己測試個(gè)6個(gè)結(jié)果:
msg1 received is: one
msg2 received is: two
msg2 received is: two
msg1 received is: one
msg2 received is: two
msg1 received is: one

No.2 Switch:

switch分支是按順序執(zhí)行的,這點(diǎn)和select不同孩锡,可以為各種類型進(jìn)行分支操作這一點(diǎn)又與select不同衙荐,還可以用來判斷類型。

下面是Concrete Example:
package main

import "fmt"
import "time"

func main() {
    i := 2
    fmt.Print("Write ", i, " as ")
    switch i {
    case 1:
        fmt.Println("one")
    case 2:
        fmt.Println("two")
    case 3:
        fmt.Println("three")
    }
    switch time.Now().Weekday() {
    case time.Saturday, time.Sunday:
        fmt.Println("It's the weekend")
    default:
        fmt.Println("It's a weekday")
    }
    t := time.Now()
    switch {
    case t.Hour() < 12:
        fmt.Println("It's before noon")
    default:
        fmt.Println("It's after noon")
    }
    whatAmI := func(i interface{}) {
        switch t := i.(type) {
        case bool:
            fmt.Println("I'm a bool")
        case int:
            fmt.Println("I'm an int")
        default:
            fmt.Printf("Don't know type %T\n", t)
        }
    }
    whatAmI(true)
    whatAmI(1)
    whatAmI("hey")
}
下面的輸出結(jié)果一目了然我不多解釋:
Write 2 as two
It's a weekday
It's after noon
I'm a bool
I'm an int
Don't know type string
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末浮创,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子砌函,更是在濱河造成了極大的恐慌斩披,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讹俊,死亡現(xiàn)場離奇詭異垦沉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)仍劈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進(jìn)店門厕倍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贩疙,你說我怎么就攤上這事讹弯。” “怎么了这溅?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵组民,是天一觀的道長。 經(jīng)常有香客問我悲靴,道長臭胜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮耸三,結(jié)果婚禮上乱陡,老公的妹妹穿的比我還像新娘。我一直安慰自己仪壮,他們只是感情好憨颠,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著睛驳,像睡著了一般烙心。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上乏沸,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天淫茵,我揣著相機(jī)與錄音,去河邊找鬼蹬跃。 笑死匙瘪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蝶缀。 我是一名探鬼主播丹喻,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼翁都!你這毒婦竟也來了碍论?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤柄慰,失蹤者是張志新(化名)和其女友劉穎鳍悠,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坐搔,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡藏研,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了概行。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蠢挡。...
    茶點(diǎn)故事閱讀 40,505評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖凳忙,靈堂內(nèi)的尸體忽然破棺而出业踏,到底是詐尸還是另有隱情,我是刑警寧澤涧卵,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布堡称,位于F島的核電站,受9級特大地震影響艺演,放射性物質(zhì)發(fā)生泄漏却紧。R本人自食惡果不足惜桐臊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望晓殊。 院中可真熱鬧断凶,春花似錦、人聲如沸巫俺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽介汹。三九已至却嗡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嘹承,已是汗流浹背窗价。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留叹卷,地道東北人撼港。 一個(gè)月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像骤竹,于是被迫代替她去往敵國和親帝牡。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評論 2 359

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理蒙揣,服務(wù)發(fā)現(xiàn)靶溜,斷路器,智...
    卡卡羅2017閱讀 134,701評論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法懒震,類相關(guān)的語法墨技,內(nèi)部類的語法,繼承相關(guān)的語法挎狸,異常的語法,線程的語...
    子非魚_t_閱讀 31,664評論 18 399
  • 1. 簡介 1.1 什么是 MyBatis 断楷? MyBatis 是支持定制化 SQL锨匆、存儲(chǔ)過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,527評論 0 4
  • 一 一個(gè)星期前我搬回了父母的房子,打算不成家前再也不搬出去住了冬筒。我的房間大概也就12平米左右恐锣,正方形,為了能把自己...
    A調(diào)閱讀 411評論 0 2
  • 常棍兒本名常琨玷禽,六零后赫段。剛上學(xué)那年遇到一個(gè)奇葩老師點(diǎn)名:常棍兒。沒人回答矢赁∨大希“奇葩”環(huán)視教室,常棍兒撩银,還是沒人回答给涕。...
    天長水秋閱讀 1,777評論 27 58