標籤:blog java 使用 os for ar div linux
for
Go 只有一種迴圈結構——`for` 迴圈。
基本的 for
迴圈除了沒有了 `( )` 之外(甚至強制不能使用它們),看起來跟 C 或者 Java 中做的一樣,而 `{ }` 是必須的。
package mainimport "fmt"func main() {sum := 0for i := 0; i < 10; i++ {sum += i}fmt.Println(sum)}
for(續)
跟 C 或者 Java 中一樣,可以讓前置、後置語句為空白。
package mainimport "fmt"func main() {sum := 1for ; sum < 1000; {sum += sum}fmt.Println(sum)}
for 是 Go 的 “while”
基於此可以省略分號:C 的 while
在 Go 中叫做 `for`。
package mainimport "fmt"func main() {sum := 1for sum < 1000 {sum += sum}fmt.Println(sum)}
死迴圈
如果省略了迴圈條件,迴圈就不會結束,因此可以用更簡潔地形式表達死迴圈。
package mainfunc main() {for {}}
if
if
語句除了沒有了 `( )` 之外(甚至強制不能使用它們),看起來跟 C 或者 Java 中的一樣,而 `{ }` 是必須的。
(耳熟嗎?)
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 的便捷語句
跟 for
一樣,`if` 語句可以在條件之前執行一個簡單的語句。
由這個語句定義的變數的範圍僅在 if
範圍之內。
(在最後的 return
語句處使用 v
看看。)
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
在 if
的便捷語句定義的變數同樣可以在任何對應的 else
塊中使用。
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)}// 這裡開始就不能使用 v 了return lim}func main() {fmt.Println(pow(3, 2, 10),pow(3, 3, 20),)}
switch
一個結構體(`struct`)就是一個欄位的集合。
除非以 fallthrough
語句結束,否則分支會自動終止。
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:// freebsd, openbsd,// plan9, windows...fmt.Printf("%s.", os)}}
switch 的執行順序
switch 的條件從上到下的執行,當匹配成功的時候停止。
(例如,
switch i {case 0:case f():}
當 i==0
時不會調用 `f`。)
注意:Go playground 中的時間總是從 2009-11-10 23:00:00 UTC 開始, 如何校正這個值作為一個練習留給讀者完成。
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 同 `switch true` 一樣。
這一構造使得可以用更清晰的形式來編寫長的 if-then-else 鏈。
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.")}}