Go 語言學(xué)習(xí)之流程控制

舉杯邀明月,對飲成三人

流程控制

流程控制在我們程序中,只要有邏輯的地方你都可能會需要到,比如條件判斷,循環(huán)等。不知道是不是所有編程語言都有,但是在我接觸的語言中是都要的,比如C、Objective-Cswift、java,當(dāng)然在Go中也是有的,下面就記錄下在Go中的用法,大同小異,有一些很趣的區(qū)別

if

if應(yīng)該是我們用的最多的了,當(dāng)我們需要判斷條件的時候,往往都會用到,在goif最大的變化就是不需要使用(),如下

var x  = 100
if x > 10 {
    println(x)
}

還有更6的功能,那就是居然可以在if中聲明一個變量,然后再判斷,用;隔開,第一次看見這種用法,感覺屌屌噠

//挺6的  居然可以在if判斷前聲明變量,但是只能在if條件中用 超出范圍則報錯
if j := 10; j > 9 {
    fmt.Println("打印出",j)
}else {
    
}   
//fmt.Println("打印出",j) //這里會報錯 超出范圍
for

for在程序中也是用的比較多的,一般的循環(huán),或者是快速遍歷
Objective -C中或者C中,我們是這樣用的

//循環(huán)語句
for (int i = 0; i < 100; i ++) {
        
 }
//Objective -C中快速遍歷
 NSArray *array = @[@"22",@"33",@"2"];
  for (NSString *str in array) {
      NSLog(@" 打印信息:%@",str);
  }

go中循環(huán)唯一不同的也是不需要()

    Lai:
    
    for index := 2; index>0; index-- {
    
        fmt.Println("indexStart",index)
        
        for objc :=0;objc <10 ;objc++  {
            
            fmt.Println("objc",objc)
            
            for m :=0;m <10 ;m++  {
                
                if m == 8{
                    continue Lai
                }
                
                fmt.Println("m",m)
            }
        }
    }

在上面的例子中,用到了一個新的東西就是 ****標(biāo)簽****,一般和goto一起使用(goto稍后會將),但是這里也可以和continuebreak使用,用來跳出多重循環(huán)外層循環(huán),這里的標(biāo)簽就是Lai,這個可以隨便定義,但是不能在循環(huán)里面進(jìn)行定義(測試的時候發(fā)現(xiàn)的)。
關(guān)于continuebreak相信大家一定都知道,前者是跳過本次循環(huán)而后者是跳出當(dāng)前循環(huán),看下上面代碼的輸出結(jié)果,相信大家就能更好的理解標(biāo)簽

indexStart 2
objc 0
m 0
m 1
m 2
m 3
m 4
m 5
m 6
m 7
indexStart 1
objc 0
m 0
m 1
m 2
m 3
m 4
m 5
m 6
m 7

如果把continue換成break又是什么結(jié)果呢?答案是這樣的

indexStart 2
objc 0
m 0
m 1
m 2
m 3
m 4
m 5
m 6
m 7

感興趣的朋友可以試試,不加Lai這個標(biāo)簽的結(jié)果

go中,我們還可以將for配合range這個方法來實(shí)現(xiàn)快速遍歷,實(shí)現(xiàn)獲取數(shù)組或者是字典中的值,下面看兩個例子

    //range和for配合使用
    pDic := map[string]string{"name":"gao","sex":"男","home":"閬中"}
    for k,value:=range pDic {
        println("key",k)
        println("value",value)
    }

結(jié)果如下

key name
value gao
key sex
value 男
key home
value 閬中

經(jīng)測試,如果在遍歷字典的時候,定義變量的時候,第一個始終代表的是key,第二個代表value,如果我們只定義一個變量,那么獲取的結(jié)果將會全是key

    pDic := map[string]string{"name":"gao","sex":"男","home":"閬中"}
    for value:=range pDic {
        //println("key",k)
        println("value",value)
    }

結(jié)果

value name
value sex
value home

go中,如果定義一個變量卻不使用的話,是會報錯的,這里我們可以用_來代替,比如講上面的k換成_

    pDic := map[string]string{"name":"gao","sex":"男","home":"閬中"}
    for _,value:=range pDic {
        //println("key",k)
        println("value",value)
    }

遍歷數(shù)組的話,可以如下這樣

    mutableArrayC := []int{1,2,3,4,5,6,7,8,9,10}
    for index,value := range mutableArrayC {
        fmt.Println("array-index",index)
        fmt.Println("array-value",value)
    }

這和字典一樣,第一個變量代表的在數(shù)組中的位置,從0開始,第二個代表具體的值

for中,還有一個用法,就是我們的第一個參數(shù)和第三個參數(shù)可以省略,比如下面這樣

    total :=100
    for ;total>0 ;  {
        total--
        fmt.Println(total)
    }

其實(shí)就是想兩個參數(shù)分別提出去了,當(dāng)然我們還可以簡化,去掉多余的兩個;那么就成了下面這樣

    total :=100
    for total>0  {
        total--
        fmt.Println(total)
    }

哎喲,握草,這是啥,怎么那么眼熟,沒錯,這就是我們熟悉的while,哈哈,挺6的

上面我們提到過goto,那么這個goto又是啥呢?下面來看看

goto

顧名思義,就是馬上干什么,去干什么,一般和標(biāo)簽一起使用,先看個例子

    nj := 1
    comeon:
    println(nj)
    nj++
    goto comeon   //跳轉(zhuǎn)到comeon去

此處例子的功能,就是一個無限加的功能,并且打印出來,一執(zhí)行,簡直嚇壞我了。。。那速度,幸好我趕緊來了個停止
看看部分結(jié)果

1.png
switch

go語言中,switch中沒有關(guān)鍵字break,如果滿足條件,那么它則直接跳出,和c中不一樣,在c中,如果不加break,那么當(dāng)條件滿足后,會將后面的都執(zhí)行一次,那么如果我們在go中要實(shí)現(xiàn)這樣的功能,又該如何呢?
這就需要用到一個關(guān)鍵字fallthrough下面看看兩個例子來說明

    //和Objective-C不同,能定義string類型
    abc := "back"
    switch abc {
    case "oh":
        fmt.Println("oh...")
    case "shirt":
        fmt.Println("shirt...")
    case "back":
        fmt.Println("back...")

    }

輸出

back...

下面我們加上fallthrough,并且將back...放到第二個判斷中

    //和Objective-C不同,能定義string類型
    abc := "back"
    switch abc {
    case "oh":
        fmt.Println("oh...")
        fallthrough
    case "back":
        fmt.Println("back...")
        fallthrough
    case "shirt":
        fmt.Println("shirt...")
        fallthrough
    default:

    }

結(jié)果

back...
shirt...

感覺屌屌噠,關(guān)于流程控制差不多就這么多,希望能幫到大家

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 個人學(xué)習(xí)批處理的初衷來源于實(shí)際工作;在某個迭代版本有個BS(安卓手游模擬器)大需求,從而在測試過程中就重復(fù)涉及到...
    Luckykailiu閱讀 4,983評論 0 11
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,067評論 0 9
  • Swift 提供了類似 C 語言的流程控制結(jié)構(gòu),包括可以多次執(zhí)行任務(wù)的for和while循環(huán),基于特定條件選擇執(zhí)行...
    窮人家的孩紙閱讀 780評論 1 1
  • “生活不是我們活過的日子,而是我們記住的日子,我們?yōu)榱酥v述,而在記憶中重現(xiàn)的日子——馬爾克斯” 在青年作家七堇年的...
    而仄閱讀 750評論 0 2
  • 幽壑潛蛟龍,枯卷隱英雄 云過方?jīng)_天,意滿壓群英
    盜跖_閱讀 258評論 0 0

友情鏈接更多精彩內(nèi)容