欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

golang switch語句的靈活寫法介紹

 更新時間:2021年05月06日 10:19:02   作者:冷月醉雪  
這篇文章主要介紹了golang switch語句的靈活寫法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

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

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

os := runtime.GOOS;

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

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

所以修改一下上面的代碼,再運(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選項"windows",還在這個分支使用了fallghrough。

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

總結(jié)

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

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

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

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

對于從C、C++剛轉(zhuǎn)到Go語言的程序員來說,這里面便存在一個“坑”,本人在開發(fā)過程中也踩過這個“坑”,那便是Go語言在switch分支語句的每個case中會自動加上一個break語句,也就是說在Go語言中程序進(jìn)入了一個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
}

程序的運(yùn)行結(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
}

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

num is 10

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

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

相關(guān)文章

  • Go語言讀取文本文件的三種方式總結(jié)

    Go語言讀取文本文件的三種方式總結(jié)

    工作中時不時需要讀取文本,文本文件是最常見的文件類型。本文將利用Go語言從逐行、逐個單詞和逐個字符三個方法讀取文件,感興趣的可以了解一下
    2023-01-01
  • GO語言實現(xiàn)的http抓包分析工具pproxy介紹

    GO語言實現(xiàn)的http抓包分析工具pproxy介紹

    這篇文章主要介紹了GO語言實現(xiàn)的http抓包分析工具pproxy介紹,本文同時對比了Fiddler、Charles等抓包軟件,需要的朋友可以參考下
    2015-03-03
  • Go語言開發(fā)代碼自測絕佳go?fuzzing用法詳解

    Go語言開發(fā)代碼自測絕佳go?fuzzing用法詳解

    這篇文章主要為大家介紹了Go語言開發(fā)代碼自測絕佳go?fuzzing用法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • go特性之?dāng)?shù)組與切片的問題

    go特性之?dāng)?shù)組與切片的問題

    這篇文章主要介紹了go特性之?dāng)?shù)組與切片的問題,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Go讀取配置文件的方法總結(jié)

    Go讀取配置文件的方法總結(jié)

    我們常見的配置文件的格式一般有:XML、JSON、INI、YAML、env和.properties,本文小編為大家整理了Go語言讀取這些格式的配置文件的方法,希望對大家有所幫助
    2023-10-10
  • Go中的nil切片和空切片區(qū)別詳解

    Go中的nil切片和空切片區(qū)別詳解

    這篇文章主要介紹了Go中的nil切片和空切片區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Go語言kube-scheduler深度剖析與開發(fā)之pod調(diào)度

    Go語言kube-scheduler深度剖析與開發(fā)之pod調(diào)度

    這篇文章主要為大家介紹了Go語言kube-scheduler深度剖析與開發(fā),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • golang中為什么不存在三元運(yùn)算符詳解

    golang中為什么不存在三元運(yùn)算符詳解

    這篇文章主要給大家介紹了關(guān)于golang中為什么不存在三元運(yùn)算符的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • golang 后臺進(jìn)程的啟動和停止操作

    golang 后臺進(jìn)程的啟動和停止操作

    這篇文章主要介紹了golang 后臺進(jìn)程的啟動和停止操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Go之interface的具體使用

    Go之interface的具體使用

    這篇文章主要介紹了Go之interface的具體使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03

最新評論