Go 只有一種迴圈 --「 for 」 。
基本的「 for 」迴圈除了沒有了 「 () 」 之外(甚至強制不能使用它們),它看起來跟 C 或者 Java 中做的一樣,而 「 {} 」 是必須的。
範例程式碼
package main
import "fmt"
func main() {
sum := 0
for i := 0; i < 10; i++ {
sum += i
}
fmt.Println(sum)
}
輸出結果
http://play.golang.org/p/TxCWviFuml
45
跟 C 或者 Java 中一樣,可以讓前置、後置語句為空。
範例程式碼
package main
import "fmt"
func main() {
sum := 1
for ; sum < 1000; {
sum += sum
}
fmt.Println(sum)
}
輸出結果
http://play.golang.org/p/5muwB33C21
1024
基於此可以省略分號:C 的 while 在 Go 中叫做 「for」。
範例程式碼
package main
import "fmt"
func main() {
sum := 1
for sum < 1000 {
sum += sum
}
fmt.Println(sum)
}
輸出結果
http://play.golang.org/p/JOC0_-6_Ti
1024
#3. 無窮迴圈
如果省略了迴圈條件,迴圈就不會結束,因此可以用更簡潔地形式表達無窮迴圈。
範例程式碼
package main
func main() {
for {
}
}
輸出結果
[process took too long]
if 語句除了沒有了「 () 」 之外(甚至強制不能使用它們),看起來跟 C 或者 Java 中的一樣,而 「 {} 」 是必須的。
範例程式碼
package main
import (
"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))
}
輸出結果
http://play.golang.org/p/_CR_GD8MaJ
1.4142135623730951 2i
跟「 for 」一樣,「 if 」 語句可以在條件之前執行一個簡單的語句。
由這個語句定義的變數的作用範圍僅在「 if 」範圍之內。
(在最後的 return 語句處使用 v 看看。)範例程式碼
package main
import (
"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),
)
}
輸出結果
http://play.golang.org/p/Bky05gYuK1
9 20
在「 if 」的簡短敘述定義的變數同樣可以在任何對應的「 else 」區塊中使用。
範例程式碼
package main
import (
"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)
}
// can't use v here, though
return lim
}
func main() {
fmt.Println(
pow(3, 2, 10),
pow(3, 3, 20),
)
}
輸出結果
http://play.golang.org/p/HPEC3aWQTx
27 >= 20
9 20
Switch 是比 if 更有閱讀性的控制結構,跟 C 語言不同的是他不需要「 break 」來跳出。
注意,如果使用「 fallthrough 」關鍵字,會執行下一個 Case。
另外 Switch 後的陳述不是必須的,你可以寫 Case 裡面。
範例程式碼
package main
import "fmt"
func choose(i int) {
switch i {
case 1:
fmt.Println("1")
case 2, 3:
fmt.Println("2 or 3")
case 4:
fallthrough
case 5:
fmt.Println("5")
}
}
func anotherChoose(i int) {
switch {
case i > 5:
fmt.Println(i, "> 5")
case i < 5:
fmt.Println(i, "< 5")
case i == 5:
fmt.Println(i, "= 5")
}
}
func main() {
choose(1)
choose(3)
choose(4)
anotherChoose(6)
}
輸出結果
http://play.golang.org/p/8iW8_wtw89
1
2 or 3
5
6 > 5
Go 語言跟 C 語言一樣也有「 goto 」,但是不建議使用,會讓程式的結構變得很糟糕。
範例程式碼
package main
import "fmt"
func main() {
i := 0
HERE:
fmt.Print(i)
i++
if i < 10 {
goto HERE
}
}
輸出結果
http://play.golang.org/p/eW9L2xiT_6
0123456789