程式的流程控制決定了程式是如何執行的,主要有三大流程控制:
- 順序控制
- 分支控制
- 循環控制
一、順序控制
順序控制時最簡單的一種流程控制,強調代碼從上到下依次執行,中間沒有任何順序和跳轉。注意的是Go語言中變量采用前向引用。如:
func main() {
var a int = 1 // 聲明變量a
var b int = a //使用變量a
fmt.Println(b)
}
上面就是先定義變量再使用,是正确的做法,相反如果先使用a而後再定義a就是錯誤的方法。
二、分支控制
分支控制就是讓程式有選擇的執行,主要分為三類:
- 單分支
- 雙分支
- 多分支
(一)單分支
1、基本文法
if <condition> {
// 執行代碼塊
}
2、執行個體
package main
import "fmt"
func main() {
a := 10
if a > 5 {
fmt.Println("大于5")
}
}
(二)雙分支控制
if <condition> {
// 執行代碼塊
} else {
// 執行代碼塊
}
package main
import "fmt"
func main() {
a := 10
if a > 5 {
fmt.Println("大于5")
} else {
fmt.Println("小于等于5")
}
}
(三)多分支控制
if <condition1> {
// 執行代碼塊1
} else if <condition2> {
// 執行代碼塊2
} else {
// 執行代碼塊3
}
先判斷條件1是否成立,如果為真就執行代碼塊1;如果條件1為假就去判斷條件2是否成立,如果條件2為真,就執行代碼塊2;如果所有的條件都不為真就執行else中的代碼塊。
多分支隻能有一個執行入口。
package main
import "fmt"
func main() {
a := 10
if a < 5 {
fmt.Println("小于5")
} else if a >= 5 && a < 10{
fmt.Println("大于等于5并且小于10")
} else {
fmt.Println("大于10")
}
}
(四)嵌套分支
在一個分支結構中完整的嵌套另一個完整的分支結構,裡面的分支結構被稱為内層分支,外面的分支結構被稱為外層分支。
-
基本文法
if <condition1> {
if <condition1.1> {
} else {
}
}
...
三、switch分支控制
switch語句用于基于不同條件執行不同的動作,每一個case分支都是唯一的,從上到下逐一測試,直到比對為止。比對項後面不需要再加break.
package main
import "fmt"
func main() {
switch <condition> {
case <condition1>,<condition2>...:
// 代碼塊1
case <condition3>,<condition4>...:
// 代碼塊2
...
default:
// 代碼塊3
}
}
- switch執行流程是,限制性condition,得到值,然後和case的表達式進行比較,如果相等就比對到,然後執行對應的case代碼塊,然後退出switch控制
- 如果switch表達式的值與任何的case表達式沒有比對成功,就執行default代碼塊,執行後退出switch流程控制
- Go語言中case後的表達式可以有多個,中間使用逗号隔開
- Go語言中case代碼塊中不需要使用break,因為預設會存在,當執行完case代碼塊中就會之間退出switch控制
package main
import "fmt"
func main() {
score := 90
switch {
case score >= 90:
fmt.Println("優秀...")
case score >= 80 && score < 90:
fmt.Println("良好...")
default:
fmt.Println("一般...")
}
}
另外也可以直接在switch後直接定義變量:
package main
import "fmt"
func main() {
switch score := 90; {
case score >= 90:
fmt.Println("優秀...")
case score >= 80 && score < 90:
fmt.Println("良好...")
default:
fmt.Println("一般...")
}
}
如果在case代碼塊中添加fallthrough會進行穿透,會執行下一個case,預設穿透一層。
package main
import "fmt"
func main() {
switch score := 90; {
case score >= 90:
fmt.Println("優秀...")
fallthrough // 優秀...良好...
case score >= 80 && score < 90:
fmt.Println("良好...")
default:
fmt.Println("一般...")
}
}
3、switch與if比較
- 如果判斷的具體數值不多,建議使用switch語句
- 對區間判斷為bool類型,建議使用if語句
四、循環控制
Go語言之循環控制 - iveBoy - 部落格園 (cnblogs.com)
作者:iveBoy
出處:http://www.cnblogs.com/shenjianping/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須在文章頁面給出原文連接配接,否則保留追究法律責任的權利。