iT邦幫忙

DAY 6
2

初學 Golang 30 天系列 第 6

初學 Golang 30 天(六)控制結構

  1. For

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

  1. for 是 Go 的 「while」

基於此可以省略分號: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]

  1. if

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

  1. if 簡短的敘述

跟「 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

  1. if 和 else

在「 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

  1. Switch

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

  1. goto

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


上一篇
初學 Golang 30 天(五)Coding Style
下一篇
初學 Golang 30 天 - (七)陣列
系列文
初學 Golang 30 天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言