Go 学习笔记(8)— 条件语句(if、if...else...、switch、fallthrough)
Go 語言提供了以下幾種條件判斷語句:
| 語句 | 描述 |
|---|---|
| if 語句 | if 語句 由一個布爾表達式后緊跟一個或多個語句組成 |
| if…else 語句 | if 語句 后可以使用可選的 else 語句, else 語句中的表達式在布爾表達式為 false 時執行 |
| if 嵌套語句 | 你可以在 if 或 else if 語句中嵌入一個或多個 if 或 else if 語句 |
| switch 語句 | switch 語句用于基于不同條件執行不同動作 |
| select 語句 | select 語句類似于 switch 語句,但是select會隨機執行一個可運行的case。如果沒有case可運行,它將阻塞,直到有case可運行 |
1. if 語句
Go 語言中 if 語句的語法如下:
if 布爾表達式 {/* 在布爾表達式為 true 時執行 */
}
示例:
package mainimport "fmt"func main() {/* 定義局部變量 */var a int = 10/* 使用 if 語句判斷布爾表達式 */if a < 20 {/* 如果條件為 true 則執行以下語句 */fmt.Printf("a 小于 20\n" )}fmt.Printf("a 的值為 : %d\n", a)
}
if 語句特點:
-
if后面的條件判斷子句不需要用小括號括起來; -
{必須放在行尾,和if或者else if放在一行; -
if后面可以帶一個簡單的初始化語句,并以分號分割,該簡單語句聲明的變量的作用域是整個if語句塊,包括后面的else if和else分支; -
if分支語句遇到return后直接返回,遇到break則跳過break下方的if語句塊;
if 還有一種特殊的寫法,可以在 if 表達式之前添加一個執行語句,再根據變量值進行判斷,代碼如下:
if x :=f(); x<y{ // 初始化語句中的聲明變量xreturn x
} else if x > z { // x 在else if 里面一樣可以被訪問return z
} else {return y
}
f() 是一個帶有返回值的函數, x := f() 是一個語句,執行 f() 后,將返回值保持在變量 x 中。 x<y 才是 if 的判斷表達式,這種寫法可以將返回值與判斷放在一行進行處理,而且返回值的作用范圍被限制在 if、else 語句組合中。
2. if…else… 語句
Go 語言中 if...else... 語句的語法如下:
if 布爾表達式 {/* 在布爾表達式為 true 時執行 */
} else {/* 在布爾表達式為 false 時執行 */
}
示例:
package mainimport "fmt"func main() {/* 局部變量定義 */var a int = 100;/* 判斷布爾表達式 */if a < 20 {/* 如果條件為 true 則執行以下語句 */fmt.Printf("a 小于 20\n" );} else {/* 如果條件為 false 則執行以下語句 */fmt.Printf("a 不小于 20\n" );}fmt.Printf("a 的值為 : %d\n", a);}
3. if 語句嵌套
Go 語言中 if 嵌套語句的語法如下:
if 布爾表達式 1 {/* 在布爾表達式 1 為 true 時執行 */if 布爾表達式 2 {/* 在布爾表達式 2 為 true 時執行 */}
}
示例:
package mainimport "fmt"func main() {/* 定義局部變量 */var a int = 100var b int = 200/* 判斷條件 */if a == 100 {/* if 條件語句為 true 執行 */if b == 200 {/* if 條件語句為 true 執行 */fmt.Printf("a 的值為 100 , b 的值為 200\n" );}}fmt.Printf("a 值為 : %d\n", a );fmt.Printf("b 值為 : %d\n", b );
}
4. switch 語句
-
switch和if語句一樣,switch后面可以帶一個可選的簡單的初始化語句; -
switch后面的表達式也是可選的,如果沒有表達式, 則case子句是一個布爾表達式,而不是一個值,此時就相當于多重if else語句; -
switch條件表達式的值不像C/C++語言那樣必須限制為整數常量, 表達式不需要為常量,甚至不需要為整數,可以是任意支持相等比較運算的類型變量; -
switch語句用于基于不同條件執行不同動作,每一個case分支都是唯一的,從上至下逐一測試,直到匹配為止; -
switch語句執行的過程從上至下,直到找到匹配項,匹配項后面也不需要再加break; -
switch默認情況下case最后自帶break語句,匹配成功后就不會執行其他case,如果我們需要執行后面的case,可以使用fallthrough; -
switch支持default語句, 當所有的case分支都不符合時, 執行default語句, 并且default語句可以放到任意位置,并不影響switch的判斷邏輯;
Go 語言中 switch 語句的語法如下:
switch i:= "y", i { // switch 后面可以帶上一個初始化語句case "y", "Y": // 多個 case 值使用逗號隔開Println("Yes")case "n", "N":Println("No")
}switch var1 {case value1:...case value2:...default:...
}
變量 var1 可以是任何類型,而 value1 和 value2 則可以是同類型的任意值。類型不被局限于常量或整數,但必須是相同的類型,或者最終結果為相同類型的表達式。
可以同時測試多個可能符合條件的值,使用逗號分割它們,例如:case val1, val2, val3
示例:
package mainimport "fmt"func main() {/* 定義局部變量 */var grade string = "B"var marks int = 90switch marks {case 90:grade = "A"case 80:grade = "B"case 50, 60, 70:grade = "C"default:grade = "D"}switch {// case 后不僅僅只是常量,還可以和 if 一樣添加表達式// 注意,這種情況的 switch 后面不再需要跟判斷變量。case grade == "A": fmt.Printf("優秀!\n")case grade == "B", grade == "C":fmt.Printf("良好\n")case grade == "D":fmt.Printf("及格\n")case grade == "F":fmt.Printf("不及格\n")default:fmt.Printf("差\n")}fmt.Printf("你的等級是 %s\n", grade)
}
輸出結果:
優秀!
你的等級是 A
5. fallthrough
在 Go 語言中 case 是一個獨立的代碼塊,執行完畢后不會像 C 語言那樣緊接著執行下一個 case ,但是為了兼容一些移植代碼,依然加入了 fallthrough 關鍵字來實現這一功能。
使用 fallthrough 會強制執行后面的 case 語句, fallthrough 不會判斷下一條 case 的表達式結果是否為 true。代碼如下:
package mainimport "fmt"func main() {switch {case false:fmt.Println("1、case 條件語句為 false")fallthroughcase true:fmt.Println("2、case 條件語句為 true")fallthroughcase false:fmt.Println("3、case 條件語句為 false")fallthroughcase true:fmt.Println("4、case 條件語句為 true")case false:fmt.Println("5、case 條件語句為 false")fallthroughdefault:fmt.Println("6、默認 case")}
}
輸出結果:
2、case 條件語句為 true
3、case 條件語句為 false
4、case 條件語句為 true
總結
以上是生活随笔為你收集整理的Go 学习笔记(8)— 条件语句(if、if...else...、switch、fallthrough)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 滴滴打车多少钱一公里,15公里得多少钱
- 下一篇: Go 学习笔记(9)— 循环(for、f