最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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之類的習(xí)慣一樣,可以在前面聲明賦值變量。我們就在這里來(lái)獲取操作系統(tǒng)的信息了。

os := runtime.GOOS;

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

在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ò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • Go語(yǔ)言學(xué)習(xí)函數(shù)+結(jié)構(gòu)體+方法+接口

    Go語(yǔ)言學(xué)習(xí)函數(shù)+結(jié)構(gòu)體+方法+接口

    這篇文章主要介紹了Go語(yǔ)言學(xué)習(xí)函數(shù)+結(jié)構(gòu)體+方法+接口,文章圍繞主題的相關(guān)資料展開(kāi)詳細(xì)的文章說(shuō)明,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • 詳解玩轉(zhuǎn)直播系列之消息模塊演進(jìn)

    詳解玩轉(zhuǎn)直播系列之消息模塊演進(jìn)

    本篇文章針對(duì)秀場(chǎng)直播,簡(jiǎn)單地描述一下消息模型,說(shuō)明一下我們消息模型的架構(gòu),并結(jié)合我們一年以來(lái),通過(guò)處理不同的業(yè)務(wù)線上問(wèn)題,來(lái)進(jìn)行演進(jìn)式的消息模型架構(gòu)的升級(jí)與調(diào)整,將此整理成文,并分享給大家
    2021-06-06
  • golang實(shí)現(xiàn)ping命令的完整代碼

    golang實(shí)現(xiàn)ping命令的完整代碼

    這篇文章給大家介紹了如何使用golang實(shí)現(xiàn)ping命令,文中給大家介紹了完整的實(shí)現(xiàn)代碼,并有詳細(xì)的圖文講解,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-02-02
  • go?goth封裝第三方認(rèn)證庫(kù)示例詳解

    go?goth封裝第三方認(rèn)證庫(kù)示例詳解

    這篇文章主要為大家介紹了go?goth封裝第三方認(rèn)證庫(kù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Go語(yǔ)言學(xué)習(xí)otns示例分析

    Go語(yǔ)言學(xué)習(xí)otns示例分析

    這篇文章主要為大家介紹了Go語(yǔ)言學(xué)習(xí)otns示例分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • beego獲取ajax數(shù)據(jù)的實(shí)例

    beego獲取ajax數(shù)據(jù)的實(shí)例

    下面小編就為大家分享一篇beego獲取ajax數(shù)據(jù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • 一文詳細(xì)談?wù)凣oLang的panic和error

    一文詳細(xì)談?wù)凣oLang的panic和error

    說(shuō)是初識(shí),并不是說(shuō)第一次使用error和panic包,而是第一次特地去了解golang中的這兩個(gè)機(jī)制,下面這篇文章主要給大家介紹了關(guān)于如何通過(guò)一文詳細(xì)談?wù)凣oLang中panic和error的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • go中import包的大坑解決方案

    go中import包的大坑解決方案

    最近開(kāi)始使用Go/GoLand 在import 自定義包時(shí)出現(xiàn)各種狀況,本文就介紹一下go中import包的大坑解決方案,具有一定的參考價(jià)值,感興趣 可以了解一下
    2022-06-06
  • 基于go手動(dòng)寫個(gè)轉(zhuǎn)發(fā)代理服務(wù)的代碼實(shí)現(xiàn)

    基于go手動(dòng)寫個(gè)轉(zhuǎn)發(fā)代理服務(wù)的代碼實(shí)現(xiàn)

    這篇文章主要介紹了基于go手動(dòng)寫個(gè)轉(zhuǎn)發(fā)代理服務(wù)的代碼實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • Go 常量基礎(chǔ)概念(聲明更改只讀)

    Go 常量基礎(chǔ)概念(聲明更改只讀)

    這篇文章主要為大家介紹了Go常量基礎(chǔ)概念包括常量的聲明更改只讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08

最新評(píng)論

肇州县| 福清市| 隆回县| 苍山县| 盐池县| 侯马市| 寻乌县| 蕲春县| 威宁| 西丰县| 新密市| 南丰县| 罗田县| 永昌县| 宁德市| 阿城市| 沁水县| 阜康市| 乡城县| 射阳县| 秦皇岛市| 安溪县| 抚宁县| 阳山县| 黑水县| 东海县| 白城市| 紫云| 丰城市| 盘山县| 米泉市| 武冈市| 云林县| 安徽省| 田东县| 达孜县| 任丘市| 建昌县| 庄河市| 绥德县| 永嘉县|