濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > golang switch語(yǔ)句的靈活寫(xiě)法介紹

golang switch語(yǔ)句的靈活寫(xiě)法介紹

熱門(mén)標(biāo)簽:阿克蘇地圖標(biāo)注 excel地圖標(biāo)注分布數(shù)據(jù) 百度地圖標(biāo)注后傳給手機(jī) 外呼系統(tǒng)用什么卡 涿州代理外呼系統(tǒng) 壽光微信地圖標(biāo)注 電話機(jī)器人軟件免費(fèi) 評(píng)價(jià)高的400電話辦理 外呼系統(tǒng)顯本地手機(jī)號(hào)

switch是很容易理解的,先來(lái)個(gè)代碼,運(yùn)行起來(lái)

看看你的操作系統(tǒng)是什么吧

package main 
import (
    "fmt"
    "runtime"
)
 
func main() {
    fmt.Print("Go runs on ")
    switch os := runtime.GOOS; os {
    case "darwin":
        fmt.Println("OS X.")
    case "linux":
        fmt.Println("Linux.")
    default:
        fmt.Printf("%s", os)
    }
}

runtine運(yùn)行時(shí)獲取當(dāng)前的操作系統(tǒng),使用GOOS。還和if for之類(lèi)的習(xí)慣一樣,可以在前面聲明賦值變量。我們就在這里來(lái)獲取操作系統(tǒng)的信息了。

os := runtime.GOOS;

{}里的case比較容易理解。操作系統(tǒng)是 "darwin" 就打印"OS X.";操作系統(tǒng)是 "linux" 就打印"Linux";其他的都直接打印系統(tǒng)類(lèi)別。

在go語(yǔ)言的switch中除非以fallthrough語(yǔ)句結(jié)束,否則分支會(huì)自動(dòng)終止。

所以修改一下上面的代碼,再運(yùn)行一下:

package main 
import (
    "fmt"
    "runtime"
)
 
func main() {
    fmt.Print("Go runs on ")
    switch os := runtime.GOOS; os {
    case "darwin":
        fmt.Println("OS X.")
    case "linux":
        fmt.Println("Linux.")
    case "windows":
        fmt.Println("win")
        fallthrough
    default:
        fmt.Printf("%s", os)
    }
}

增加了當(dāng)前的系統(tǒng)的case選項(xiàng)"windows",還在這個(gè)分支使用了fallghrough。

如果你再注釋掉 fallthrough,或干脆刪除 fallthrough,再運(yùn)行,就會(huì)發(fā)現(xiàn),那個(gè)穿透的效果沒(méi)有了。

總結(jié)

switch 的條件從上到下的執(zhí)行,當(dāng)匹配成功的時(shí)候停止。如果匹配成功的這個(gè)分支是以fallthrough結(jié)束的,那么下一個(gè)緊鄰的分支也會(huì)被執(zhí)行。

switch的沒(méi)有條件的用法。這其實(shí)相當(dāng)于switch true一樣。每一個(gè)case選項(xiàng)都是bool表達(dá)式,值為true的分支就會(huì)被執(zhí)行,或者執(zhí)行default。

package main 
import (
    "fmt"
    "time"
)
 
func main() {
    t := time.Now()
    switch  {
    case t.Hour() > 12:
        fmt.Println("Morning was passed.")
    case t.Hour() > 17:
        fmt.Println("Afternoon was passed.")
    default:
        fmt.Println("Now too early.")
 
    }
}

補(bǔ)充:記Golang switch的一個(gè)“坑”

switch分支語(yǔ)句在各個(gè)編程語(yǔ)言中都很常用,能夠根據(jù)條件選中一個(gè)或多個(gè)case語(yǔ)句進(jìn)行執(zhí)行,習(xí)慣于C、C++語(yǔ)言編程的都知道,在C、C++中switch分支判斷條件會(huì)依次遍歷每個(gè)case,當(dāng)遇到符合條件的case時(shí),便會(huì)執(zhí)行該case中的語(yǔ)句,直到遇到case中顯示的break語(yǔ)句才會(huì)終止switch流程,如果一個(gè)case中沒(méi)有顯示的break此case,程序便會(huì)執(zhí)行下一個(gè)case(如果存在的話)。

對(duì)于從C、C++剛轉(zhuǎn)到Go語(yǔ)言的程序員來(lái)說(shuō),這里面便存在一個(gè)“坑”,本人在開(kāi)發(fā)過(guò)程中也踩過(guò)這個(gè)“坑”,那便是Go語(yǔ)言在switch分支語(yǔ)句的每個(gè)case中會(huì)自動(dòng)加上一個(gè)break語(yǔ)句,也就是說(shuō)在Go語(yǔ)言中程序進(jìn)入了一個(gè)case流程,不管程序中有沒(méi)有顯示的break此case,程序都不會(huì)繼續(xù)執(zhí)行其他的case流程,而是直接退出整個(gè)switch流程,這里做一個(gè)簡(jiǎn)單的實(shí)驗(yàn)。

顯示的在每個(gè)case中添加上break語(yǔ)句:

package main
import "fmt"
func main() {
    var num = 10
    switch num {
    case 5:
        fmt.Println("num is 5")
        break
    case 10:
        fmt.Println("num is 10")
        break
    case 15:
        fmt.Println("num is 15")
        break
    default:
        fmt.Println("num is default branch")
    }
    return
}

程序的運(yùn)行結(jié)果如下:

num is 10

下面去掉每個(gè)case中顯示的break語(yǔ)句,看看結(jié)果是什么呢。

package main
import "fmt"
func main() {
    var num = 10
    switch num {
    case 5:
        fmt.Println("num is 5")
    case 10:
        fmt.Println("num is 10")
    case 15:
        fmt.Println("num is 15")
    default:
        fmt.Println("num is default branch")
    }
    return
}

程序的運(yùn)行結(jié)果如下:

num is 10

很明顯,在每個(gè)case語(yǔ)句中是否顯示的添加break語(yǔ)句都只會(huì)執(zhí)行其中的一個(gè)分支流程,這對(duì)于想要通過(guò)break來(lái)控制每次執(zhí)行case數(shù)量的程序員來(lái)說(shuō)確實(shí)是一個(gè)不大不小的“坑”。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • Python基礎(chǔ)之python循環(huán)控制語(yǔ)句break/continue詳解
  • C語(yǔ)言之初始if語(yǔ)句詳解
  • C語(yǔ)言入門(mén)篇--學(xué)習(xí)選擇,if,switch語(yǔ)句以及代碼塊
  • 如何用c++表驅(qū)動(dòng)替換if/else和switch/case語(yǔ)句
  • 論一條select語(yǔ)句在MySQL是怎樣執(zhí)行的
  • C語(yǔ)言中常見(jiàn)的幾種流程控制語(yǔ)句
  • 一篇文章帶你了解JavaScript-語(yǔ)句
  • Python實(shí)現(xiàn)switch/case語(yǔ)句
  • C語(yǔ)言進(jìn)階教程之循環(huán)語(yǔ)句缺陷詳析
  • C語(yǔ)言控制語(yǔ)句之 循環(huán)
  • mybatis中sql語(yǔ)句CDATA標(biāo)簽的用法說(shuō)明
  • JavaScript中三種for循環(huán)語(yǔ)句的使用總結(jié)(for、for...in、for...of)
  • C 語(yǔ)言基礎(chǔ)之C 語(yǔ)言三大語(yǔ)句注意事項(xiàng)

標(biāo)簽:梅河口 吐魯番 汕頭 欽州 雞西 重慶 銅川 蘭州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《golang switch語(yǔ)句的靈活寫(xiě)法介紹》,本文關(guān)鍵詞  golang,switch,語(yǔ)句,的,靈活,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《golang switch語(yǔ)句的靈活寫(xiě)法介紹》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于golang switch語(yǔ)句的靈活寫(xiě)法介紹的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    乐东| 麻阳| 苍溪县| 祁东县| 红河县| 尤溪县| 罗城| 沅江市| 黄山市| 鸡泽县| 荔浦县| 通榆县| 沙洋县| 绵阳市| 芜湖市| 贞丰县| 娱乐| 宝丰县| 北海市| 阜康市| 福鼎市| 潼南县| 隆回县| 庆元县| 嘉定区| 大城县| 仲巴县| 雅安市| 江西省| 棋牌| 汕头市| 龙江县| 安康市| 融水| 东安县| 三江| 乌苏市| 平山县| 都安| 平定县| 南昌市|