一、程序的流程結(jié)構(gòu)
程序的流程控制結(jié)構(gòu)一共有三種:順序結(jié)構(gòu),選擇結(jié)構(gòu),循環(huán)結(jié)構(gòu)。
順序結(jié)構(gòu):從上向下,逐行執(zhí)行。
選擇結(jié)構(gòu):條件滿足,某些代碼才會(huì)執(zhí)行。0-1次
? 分支語句:if,switch,select
循環(huán)結(jié)構(gòu):條件滿足,某些代碼會(huì)被反復(fù)的執(zhí)行多次。0-N次
? 循環(huán)語句:for
二、條件語句
If語句
語法格式:
if 布爾表達(dá)式 {
/* 在布爾表達(dá)式為 true 時(shí)執(zhí)行 */
}
if 布爾表達(dá)式 {
/* 在布爾表達(dá)式為 true 時(shí)執(zhí)行 */
} else {
/* 在布爾表達(dá)式為 false 時(shí)執(zhí)行 */
}
if 布爾表達(dá)式1 {
/* 在布爾表達(dá)式1為 true 時(shí)執(zhí)行 */
} else if 布爾表達(dá)式2{
/* 在布爾表達(dá)式1為 false ,布爾表達(dá)式2為true時(shí)執(zhí)行 */
} else{
/* 在上面兩個(gè)布爾表達(dá)式都為false時(shí),執(zhí)行*/
}
示例代碼:
package main
import "fmt"
func main() {
/* 定義局部變量 */
var a int = 10
/* 使用 if 語句判斷布爾表達(dá)式 */
if a < 20 {
/* 如果條件為 true 則執(zhí)行以下語句 */
fmt.Printf("a 小于 20\n" )
}
fmt.Printf("a 的值為 : %d\n", a)
}
如果其中包含一個(gè)可選的語句組件(在評(píng)估條件之前執(zhí)行),則還有一個(gè)變體。它的語法是
if statement(初始化語句); condition(判斷條件) {
}
if condition{
}
示例代碼:
package main
import (
"fmt"
)
func main() {
if num := 10; num % 2 == 0 { //checks if number is even
fmt.Println(num,"is even")
} else {
fmt.Println(num,"is odd")
}
}
//輸出結(jié)果
10 is even
需要注意的是,num的定義在if里,那么只能夠在該if…else語句塊中使用,否則編譯器會(huì)報(bào)錯(cuò)的。
switch語句:“開關(guān)”
-
switch是一個(gè)條件語句,它計(jì)算表達(dá)式并將其與可能匹配的列表進(jìn)行比較,并根據(jù)匹配執(zhí)行代碼塊。它可以被認(rèn)為是一種慣用的方式來寫多個(gè)if else子句。
-
switch 語句用于基于不同條件執(zhí)行不同動(dòng)作,每一個(gè) case 分支都是唯一的,從上直下逐一測(cè)試,直到匹配為止。
-
switch 語句執(zhí)行的過程從上至下,直到找到匹配項(xiàng),匹配項(xiàng)后面也不需要再加break(跟java不同)。
-
而如果switch沒有表達(dá)式,它會(huì)匹配true
-
Go里面switch默認(rèn)相當(dāng)于每個(gè)case最后帶有break,匹配成功后不會(huì)自動(dòng)向下執(zhí)行其他case,而是跳出整個(gè)switch, 但是可以使用
fallthrough
強(qiáng)制執(zhí)行后面的case代碼。 -
變量 var1 可以是任何類型,而 val1 和 val2 則可以是同類型的任意值。類型不被局限于常量或整數(shù),但必須是相同的類型;或者最終結(jié)果為相同類型的表達(dá)式。
-
同時(shí)測(cè)試多個(gè)可能符合條件的值,使用逗號(hào)分割它們,例如:case val1, val2, val3
package main import ( "fmt" ) func main() { var grade string = "B" var marks int = 90 switch marks { case marks: grade = "A" case 80: grade = "B" case 50, 60, 70: grade = "C" //case 后可以由多個(gè)數(shù)值 default: grade = "D" } //表達(dá)式被省略,則被認(rèn)為是switch true,并且每個(gè)case表達(dá)式都被計(jì)算為true switch { case grade == "A": fmt.Printf("優(yōu)秀!\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("你的等級(jí)是 %s\n", grade) //如需貫通后續(xù)的一個(gè)case,就添加fallthrough,只能是某個(gè)case的最后一行 ,寫在最后一個(gè)case也會(huì)報(bào)錯(cuò) switch x := 5; x { default: fmt.Println(x) case 5: x += 10 fmt.Println(x) fallthrough case 6: x += 20 fmt.Println(x) fallthrough case 7: x += 30 fmt.Println(x) fallthrough case 8: x += 40 fmt.Println(x) } } //輸出結(jié)果 優(yōu)秀! 你的等級(jí)是 A 15 35 65 105
-
switch 語句還可以被用于 type-switch 來判斷某個(gè) interface 變量中實(shí)際存儲(chǔ)的變量類型。
package main import "fmt" func main() { var x interface{} switch i := x.(type) { case nil: fmt.Printf(" x 的類型 :%T",i) case int: fmt.Printf("x 是 int 型") case float64: fmt.Printf("x 是 float64 型") case func(int) float64: fmt.Printf("x 是 func(int) 型") case bool, string: fmt.Printf("x 是 bool 或 string 型" ) default: fmt.Printf("未知型") } } //輸出結(jié)果 x 的類型 :<nil>
for循環(huán)
-
程序的流程控制結(jié)構(gòu)一共有三種:
- 順序結(jié)構(gòu):代碼從上向下逐行的執(zhí)行;
- 選擇結(jié)構(gòu):條件滿足,某些代碼才會(huì)被執(zhí)行。0-1次;
- 循環(huán)結(jié)構(gòu):條件滿足,某些代碼會(huì)被反復(fù)的多次執(zhí)行。0-n次。
-
語法結(jié)構(gòu):文章來源:http://www.zghlxwxcb.cn/news/detail-468167.html
-
for init; condition; post { }
(跟Java類似)文章來源地址http://www.zghlxwxcb.cn/news/detail-468167.html -
package main import ( "fmt" ) func main() { for i := 1; i <= 10; i++ { fmt.Printf(" %d",i) } }
-
到了這里,關(guān)于九、程序的流程結(jié)構(gòu)(if分支語句,Switch分支,for循環(huán))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!