前言 本文為「A tour of Go 」語言指南的學習筆記。
控制流程 for Go 只有一種循環結構 for
循環。for
語句沒有圓括號。
1 2 3 4 5 6 7 8 9 10 11 12 13 package mainimport "fmt" func main () { sum := 0 for i := 0 ; i < 10 ; i++ { sum += i } fmt.Println(sum) }
前置與後置語句可以省略。
1 2 3 4 5 6 7 8 9 10 11 12 13 package mainimport "fmt" func main () { sum := 1 for ; sum < 1000 ; { sum += sum } fmt.Println(sum) }
for
語句可以是其他語言的 while
語句。
1 2 3 4 5 6 7 8 9 10 11 12 13 package mainimport "fmt" func main () { sum := 1 for sum < 1000 { sum += sum } fmt.Println(sum) }
無窮迴圈是將循環條件省略。
1 2 3 4 5 6 7 8 package mainfunc main () { for { } }
if if
語句沒有圓括號。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 package mainimport ( "fmt" "math" ) func sqrt (x float64 ) string { if x < 0 { return sqrt(-x) + "i" } return fmt.Sprint(math.Sqrt(x)) } func main () { fmt.Println(sqrt(2 ), sqrt(-4 )) }
if
語句可以在條件之前執行一個簡單的語句,由這個語句定義的變數,其作用域只限於在該 if
語句之內。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 package mainimport ( "fmt" "math" ) func pow (x, n, lim float64 ) float64 { if v := math.Pow(x, n); v < lim { return v } return lim } func main () { fmt.Println( pow(3 , 2 , 10 ), pow(3 , 3 , 20 ), ) }
在 if
的便捷語句定義的變數可以在對應的 else
區塊中使用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 package mainimport ( "fmt" "math" ) func pow (x, n, lim float64 ) float64 { if v := math.Pow(x, n); v < lim { return v } else { fmt.Printf("%g >= %g\n" , v, lim) } return lim } func main () { fmt.Println( pow(3 , 2 , 10 ), pow(3 , 3 , 20 ), ) }
switch switch
語句的條件從上到下執行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 package mainimport ( "fmt" "runtime" ) func main () { fmt.Print("Go runs on " ) switch os := runtime.GOOS; os { case "darwin" : fmt.Println("OS X." ) case "linux" : fmt.Println("Linux." ) default : fmt.Printf("%s." , os) } }
除非使用 fallthrough
語句,否則匹配成功會自動終止
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 package mainimport ( "fmt" "time" ) func main () { fmt.Println("When's Saturday?" ) today := time.Now().Weekday() switch time.Saturday { case today + 0 : fmt.Println("Today." ) case today + 1 : fmt.Println("Tomorrow." ) case today + 2 : fmt.Println("In two days." ) default : fmt.Println("Too far away." ) } }
沒有條件的 switch
語句同 switch true
一樣,用以替代長的 if-then-else
條件式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 package mainimport ( "fmt" "time" ) func main () { t := time.Now() switch { case t.Hour() < 12 : fmt.Println("Good morning!" ) case t.Hour() < 17 : fmt.Println("Good afternoon." ) default : fmt.Println("Good evening." ) } }