if語句
go里面if不需要括號將條件表達式包含起來,這與python也有點類似
if 條件表達式 {
}
if num > 18 {// ...
} else if num > 20 {// ...
} else {// ...
}
需要注意的是go支持在if的條件表達式中直接定義一個變量,變量的作用域只在if范圍內,如:
if num := 20; num > 5 {// ...
}
這讓我們一些場景可以便捷地存儲中間變量
switch語句
go語言的switch分支不需要有break語句,這是與c不同的地方。基本語法如下:
switch expression {
case expression1,expression2,…:
// …
case expression3, expression4,…:
// …
// …
default:
// …
}
golang中是允許多個表達式匹配的,比如expression1或expression2,就會執行第一個case。default語句不是必須的,但為了程序穩定通常需要有默認操作。
switch num {
case 1, 2, 3:fmt.Println("num", num)
case 4, 5, 6:num++
default:fmt.Println("not in range")
}
另外,switch后面也可以不帶表達式,這時等價于if -else
switch {
case num == 1:// ...
case num == 2:// ...
default:// ...
}
switch后面也可以定義一個變量,分號結束,通常不這樣寫:
switch num := 90; {
case num > 90:// ...
default:// ...
}
switch fallthrough
在一個case語句中使用fallthrough,則會繼續執行下一個case分支,注意這里下一個分支不用判斷,直接執行。但通常不用,條件語句已經足夠覆蓋所有場景
switch num {
case 10:// ...fallthrough
case 20:// ...
default:// ...
}
type-switch(不懂的后面的文章會講到)
switch語句還可以用來判斷某個interface變量中實際指向的變量類型
var x interface
var y = 10.0
x = y
switch i : x.(type) {case nil:// ...case int:// ...case float64:// ...case func(int) float64:fmt.Printf("x 是 func(int)型")case bool, string://default:// ...
}
for循環語句
go語言的for循環也是不需要用()把表達式給包起來,如:
for num := 0; num <= 10; num++ {// ...
}
此外,for循環可以有以下兩種寫法
for num < 99 {// 只寫循環條件的寫法
}for {// 什么條件都不寫,相當于無限循環,在內部決定循環終止條件
}// 上面的for等價于
for ; ; {
}
for range遍歷字符串
另外,go語言也支持fo range的遍歷方式,便于遍歷字符串和數組,如:
str1 := "hello, zhangping"
for index, val := range str1 {fmt.Printf("index:%d val=%c\n", index, val)
}
for range遍歷字符串時,是按照字符來遍歷的,而不是按照字節來遍歷的。與我們常規字節遍歷的區別在于,像遍歷中文字符串,for range會打印一整個中文字符,但常規字節遍歷會打印單個字節(一個中文兩個字節),通常會亂碼
傳統的方法想要打印中文,需要轉換成rune的切片:
str1 := "hello, 張平"
str2 := []rune(str1)
for i := 0; i < len(str2); i++ {fmt.Printf("%c\n", str2[i])// break// coontinue
}
go里面沒有while和do while語句,要跳出循環也是break,跳過本次循環continue,另外go語言也支持goto語句跳到任意語句處,但最好不要用。