佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > golang switch語句的靈活寫法介紹

golang switch語句的靈活寫法介紹

熱門標簽:鐵路電話系統(tǒng) AI電銷 網(wǎng)站排名優(yōu)化 Linux服務器 呼叫中心市場需求 地方門戶網(wǎng)站 服務外包 百度競價排名

switch是很容易理解的,先來個代碼,運行起來

看看你的操作系統(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運行時獲取當前的操作系統(tǒng),使用GOOS。還和if for之類的習慣一樣,可以在前面聲明賦值變量。我們就在這里來獲取操作系統(tǒng)的信息了。

os := runtime.GOOS;

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

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

所以修改一下上面的代碼,再運行一下:

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)
    }
}

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

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

總結(jié)

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

switch的沒有條件的用法。這其實相當于switch true一樣。每一個case選項都是bool表達式,值為true的分支就會被執(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.")
 
    }
}

補充:記Golang switch的一個“坑”

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

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

顯示的在每個case中添加上break語句:

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
}

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

num is 10

下面去掉每個case中顯示的break語句,看看結(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
}

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

num is 10

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

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

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

標簽:銅川 黃山 湘潭 崇左 衡水 仙桃 湖南 蘭州

巨人網(wǎng)絡通訊聲明:本文標題《golang switch語句的靈活寫法介紹》,本文關鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關。
  • 相關文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    当雄县| 登封市| 万荣县| 宁阳县| 石嘴山市| 聊城市| 历史| 新泰市| 洛隆县| 南溪县| 东港市| 乐清市| 临沭县| 苍山县| 蛟河市| 错那县| 原阳县| 兰考县| 本溪市| 瓮安县| 徐州市| 军事| 北安市| 专栏| 保靖县| 岱山县| 双牌县| 桦南县| 宿松县| 安义县| 扬州市| 恩平市| 安福县| 泾川县| 开阳县| 黄梅县| 安溪县| 古浪县| 门源| 井冈山市| 宝应县|