GO學習筆記——GO語言中那些控制語句(7)

if條件語句

先來看一下一個簡單的條件語句的模型

a := 1
if a > 0 {
    fmt.Println("a是大於0的")
    if a < 4{
        fmt.Println("a是小於4的")
    }
}else if a < 0{
    fmt.Println("a是小於0的")
}else{
    fmt.Println("a是等於0的")
}

這邊來說幾個注意點:

  1. GO語言中if條件語句後面不用帶括號
  2. GO語言中if條件語句的{}必須要有,不可以像C++一樣,如果{}內只有一行語句可以省略{}
  3. else或else if應該在上一個模塊的 } 的同一行之後,不可以像下面這樣寫,編譯器會報錯。
a := 1
if a > 0 {
    fmt.Println("a是大於0的")
    if a < 4{
        fmt.Println("a是小於4的")
    }
}
else if a < 0{
    fmt.Println("a是小於0的")
}
else{
    fmt.Println("a是等於0的")
}

//這邊出錯的原因是 Go 語言的分號是自動插入的

下面來說一個GO語言if條件語句的另一種用法,這也是GO相對於C++比較方便的一個地方:可以在條件語句先執行一個聲明語句

if statement; condition {  
}

上述的statement是可選的,如果有,那就有了一個聲明語句。下面的代碼a初始化的地方在if語句中

if a := 1;a > 0 {
    fmt.Println("a是大於0的")
    if a < 4{
	fmt.Println("a是小於4的")
    }
} else if a < 0 {
	fmt.Println("a是小於0的")
} else {
	fmt.Println("a是等於0的")
}

GO語言中,還可以在if條件語句的地方創建一個屬於這個if條件語句的變量,如上a就是屬於這個if條件語句的變量,在後續的else if 和 else中都可以訪問這個變量,但是條件語句外不可以訪問這個變量a。

這其實好比C++在下面的for循環語句中對C優化的一點

for (int i = 0; i < 10 ; ++i)
    cout << i << endl

C++這個變量i也是屬於這個for循環的,for循環外就訪問不到這個變量i了。而C語言中這樣寫是會在有些編譯器下是會報錯的。


switch選擇語句

先來看一下一個簡單的switch語句模型

a := 1
switch a{
    case 1:
	fmt.Println("1")
    case 2:
	fmt.Println("2")
    default:
	fmt.Println("不是1也不是2")
}

學過C++的人都知道,C++的語句每個case模塊都是需要有break的,而GO語言中卻沒有。因此這也是GO語言方便的一個地方,我們不用每次在case後面都寫一個break啦,編譯器會默認認爲執行一個case就會break了。如果不想讓它break,才需要加上關鍵字fallthrough

同樣地,switch語句也好if語句一樣,可以先執行一個聲明語句,它的用法和if也是一樣的,如下屬代碼

switch a := 1;a{	//在switch內部使用的一個變量a
    case 1:
	fmt.Println("1")
    case 2:
	fmt.Println("2")
    default:
	fmt.Println("不是1也不是2")
}

另外,GO語言中switch語句還可以實現,多表達式判斷的方式,用逗號隔開就可以了

switch a := 1;a{	//在switch內部使用的一個變量a
    case 1,2:    //如果是1或是2,都執行下面的語句
	fmt.Println("1或2")
    default:
	fmt.Println("不是1也不是2")
}

還有無條件判斷語句,即switch後面可以沒有表達式(有聲明語句沒有表達式也算, 如下)

switch a:= 1;{	
    //在switch內部使用的一個變量a,但是;後面並沒有表達式,在case中進行條件判斷
    case a == 1 || a == 2:
	fmt.Println("1或2")
    default:
	fmt.Println("不是1也不是2")
}

for循環語句

GO中的循環語句沒有while了,只有for,下面來看一下一個簡單的for循環

a := 0
for i := 1; i < 10; i++{
    a += i
}

下面的循環就是把1-10加到了a上。這邊還是提幾個注意點

  1. GO語言中for循環語句後面不要帶括號(這和if也是一樣的)
  2. GO語言中for循環語句的{}必須要有,不可以像C++一樣,如果{}內只有一行語句可以省略{}(這和if也是一樣的)
  3. GO語言中可以像C++一樣,在第一個statement部分直接執行一個聲明語句,聲明一個屬於for循環語句本身的變量

其他的用法和C++都差不多,包括像break和continue這樣的用法,對for循環中省略幾個條件能達到和while循環差不多的效果,如果三個條件都省略也可以達到死循環的效果,這個和C++也是一樣的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章