新聞中心
流程控制是計(jì)算機(jī)運(yùn)算領(lǐng)域的用語,意指在程序運(yùn)行時(shí),個(gè)別的指令(或是陳述、子程序)運(yùn)行或求值的順序。不論是在聲明式編程語言或是函數(shù)編程語言中,都有類似的概念,下面為大家分享一下流程控制具體方法。

img
if-else
if-else特點(diǎn):
條件語句不需要使用小括號(hào)()包起來;
花括號(hào){}必須有,并且左花括號(hào){必須和if或else在同一行;
在if之后,條件語句之前可以添加變量初始化語句,使用;分隔。
package main
import "fmt"
func main() {
if 7%2 == 0 {
fmt.Println("7 is even")
} else {
fmt.Println("7 is odd") // 7 is odd
}
if 8%4 == 0 {
fmt.Println("8 is divisible by 4") // 8 is divisible by 4
}
if num := 9; num "is negative")
} else if num "has 1 digit") // 9 has 1 digit
} else {
fmt.Println(num, "has multiple digits")
}
}
switch
switch特點(diǎn):
左花括號(hào) { 必須和 switch 在同一行;
條件表達(dá)式不限制常量或者整數(shù);
switch 后可添加變量初始化語句,使用 ; 分割;
可以不設(shè)定條件表達(dá)式,在此種情況下,整個(gè) switch 結(jié)構(gòu)與多個(gè) if-else 的邏輯作用等同;
單個(gè) case 中可以出現(xiàn)多個(gè)結(jié)果選項(xiàng);
在 case 中添加 fallthrough 關(guān)鍵字,會(huì)繼續(xù)執(zhí)行緊跟的下一個(gè) case,不需要判斷 case 的條件語句;
switch 支持 default 語句,當(dāng)所有 case 都不滿足時(shí),執(zhí)行 default 語句。
package main
import (
"fmt"
"time"
)
func main() {
i := 2
fmt.Print("write ", i, " as ")
switch i {
case 1:
fmt.Println("one")
case 2:
fmt.Println("two") // write 2 as two
fallthrough
case 3:
fmt.Println("three") // three
case 4, 5, 6:
fmt.Println("four, five, six")
}
switch num := 9; num {
case 1:
fmt.Println("one")
default:
fmt.Println("nine") // nine
}
switch time.Now().Weekday() {
case time.Saturday, time.Sunday:
fmt.Println("it's the weekend")
default:
fmt.Println("it's a weekday") // it's a weekday } t := time.Now() switch { case t.Hour() s before noon") default: fmt.Println("it's after noon") // it's after noon } }
for
for特點(diǎn):
條件表達(dá)式不需要使用小括號(hào) () 包起來;
花括號(hào) {} 必須有,并且左花括號(hào) { 必須和 for 在同一行;
支持 continue 和 break。
package main
import (
"fmt"
)
func main() {
i := 1
// 只有條件
for i for j := 7; j for {
fmt.Println("loop")
break
}
// 遍歷數(shù)組
a := [...]int{10, 20, 30, 40}
for i := range a {
fmt.Println(i)
}
for i, v := range a {
fmt.Println(i, v)
}
// 遍歷切片
s := []string{"a", "b", "c"}
for i := range s {
fmt.Println(i)
}
for i, v := range s {
fmt.Println(i, v)
}
// 遍歷字典
m := map[string]int{"a": 10, "b": 20, "c": 30}
for k := range m {
fmt.Println(k)
}
for k, v := range m {
fmt.Println(k, v)
}
}
goto,break,continue
goto 特點(diǎn):
只能在函數(shù)內(nèi)跳轉(zhuǎn),需要配合標(biāo)簽一起使用;
不能跳過內(nèi)部變量聲明語句;
只能跳到同級(jí)作用域或者上層作用域內(nèi),不能跳到內(nèi)部作用域內(nèi)。
package main
import (
"fmt"
)
func main() {
// 跳出循環(huán)
for i := 0; ; i++ {
if i == 2 {
goto L1
}
fmt.Println(i)
}
L1:
fmt.Println("Done")
// 跳過變量聲明,不允許
// goto L2
// j := 1
// L2:
}
break 特點(diǎn):
單獨(dú)使用,用于跳出 break 當(dāng)前所在的 for、 switch、 select 語句的執(zhí)行;
和標(biāo)簽一起使用,用于跳出標(biāo)簽所標(biāo)識(shí)的 for、 switch、 select 語句的執(zhí)行,可用于跳出多重循環(huán),但標(biāo)簽和 break 必須在同一個(gè)函數(shù)內(nèi)。
package main
import (
"fmt"
)
func main() {
// break 跳轉(zhuǎn)到標(biāo)簽處,然后跳過 for 循環(huán)
L3:
for i := 0; ; i++ {
for j := 0; ; j++ {
if i >= 2 {
break L3
}
if j > 4 {
break
}
fmt.Println(i, j)
}
}
}
continue 特點(diǎn):
單獨(dú)使用,用于跳出 continue 當(dāng)前所在的 for 循環(huán)的本次迭代;
和標(biāo)簽一起使用,用于跳出標(biāo)簽所標(biāo)識(shí)的 for 語句的本次選代,但標(biāo)簽和 continue 必須在同一個(gè)函數(shù)內(nèi)。
package main
import (
"fmt"
)
func main() {
// continue 跳轉(zhuǎn)到標(biāo)簽處,然后執(zhí)行 i++
L4:
for i := 0; ; i++ {
for j := 0; j if i > 4 {
break L4
}
if i >= 2 {
continue L4
}
if j > 4 {
continue
}
fmt.Println(i, j)
}
}
}
除此之外,還有 break 和 continue,都可以搭配循環(huán)語句和跳轉(zhuǎn)語句使用。跳轉(zhuǎn)語句在某些場(chǎng)景下會(huì)非常實(shí)用,但也很容易出現(xiàn)一些莫名其妙的問題,所以使用起來要更謹(jǐn)慎些。
新聞名稱:詳解流程控制具體方法
轉(zhuǎn)載源于:http://fisionsoft.com.cn/article/ccoghgp.html


咨詢
建站咨詢
