Iris 這個在 go 語言上地表最快的網頁框架-邏輯判斷語法

go 的邏輯判斷語法

在介紹完 go 的變數以及容器,接下來要開始進入程式邏輯判斷的部分,這部分內容與大部分語言相同,不外乎就是ifelseswitch相關的語法,所以接下來針對這細節部分加以說明。

邏輯判斷語法的說明

前面有針對邏輯判斷的語法做一個初步的介紹,所謂邏輯判斷語法不外乎就是ifelseswitch,所以接下來分別針對期內容作細部的說明。

if

這部分就是簡單的如果判斷是,如果成立就會執行區塊內的程式,請見以下例子

package main

import (
    "fmt"
)

func main() {
    odd := 11
    mod := odd % 2
    if mod != 0{
        fmt.Println(odd, "is odd")
    }
}

上面就是一個簡單的if判斷式的例子,其中當if後面條件成立時就會執行內的程式,然而還可以寫成下面例子

package main

import (
    "fmt"
)

func main() {
    odd := 11
    if mod := odd % 2; mod != 0{
        fmt.Println(odd, "is odd")
    }
}

簡單講就是將賦值,與判斷寫在同一個區塊,再以;分隔開來,當;後面的判斷成立時就會執行的程式。

else

在介紹完if接下來跟大家介紹else,簡單說明else就是當if不成立時會判斷的其他條件,當條件成立時會執行區塊內的程式。詳細請看以下例子

package main

import "fmt"

func main() {
    v := 4
    if v == 1 {
        fmt.Printf("%d is 1", v)
    } else if v == 2 {
        fmt.Printf("%d is 2", v)
    } else if v ==3 {
        fmt.Printf("%d is 3", v)
    } else {
        fmt.Printf("%d is else", v)
    }
}

這裡要注意格式,若是與上面例子不相符會導致於編譯錯誤的問題,同時這部分也可以再if加入賦值的需求然後再;後面加入判斷式,詳細請看以下例子

package main

import "fmt"

func main() {
    o := 10

    if v := o%3;v == 1 {
        fmt.Printf("%d is 1", v)
    } else if v == 2 {
        fmt.Printf("%d is 2", v)
    } else if v ==3 {
        fmt.Printf("%d is 3", v)
    } else {
        fmt.Printf("%d is else", v)
    }
}

再例子內v這變數只存在ifelse的判斷式之內,所以拿到底下使用會造成編譯失敗的狀況。到目前為止ifelse的介紹將告一段落,接下來要介紹switch的判斷式。

switch

就如同ifelse一樣,switch的判斷式是檢查變數是否與case後的值相同,當相同就會執行區塊內的程式,詳細請看下列例子

package main

import "fmt"

func main() {
    switch os := "Other"; os {
    case "First":
        fmt.Println("First.")
    case "Second":
        fmt.Println("Second.")
    default:
        // freebsd, openbsd,
        // plan9, windows...
        fmt.Printf("%s.\n", os)
    }
}

以上例子主要是在switch後面有一個賦值的式子接下來以;來區隔,在;後是接著要判斷的變數go,而case後是放著比對的內容,如果go的內容與case後的值相同則會執行casecase之間的程式,如果最後都沒成立會執行default的程式,還有比較特別的地方是對於go而言casecase之間不需要break隔開。但是以下例子就會造成邏輯判斷錯誤

package main

import "fmt"

func main() {
    switch os := "Second"; os {
    case "First":
    case "Second":
        fmt.Println("First and Second.")
    default:
        // freebsd, openbsd,
        // plan9, windows...
        fmt.Printf("%s.\n", os)
    }
}

那要如何修改上述例子呢,就把他當ifelse來使用即可,就是不要在switch給條件式,而在case內寫判斷式,如下列例子所示

package main

import "fmt"

func main() {
    os := "Fourth"
    switch  {
    case os == "First" || os == "Second":
        fmt.Println("First and Second.")
    case os == "Third" || os == "Fourth":
        fmt.Println("Third and Fourth.")
    default:
        // freebsd, openbsd,
        // plan9, windows...
        fmt.Printf("%s.\n", os)
    }
}

除了上述的例子之外switch還有一個要注意的點是,判斷式的順序是由上而下,如果其中一個case成立後就會執行其中的程式並且離開switch判斷式。

結論

這篇的內容主要是介紹 go 的邏輯判斷式,並跟大家分享一下 go 的邏輯判斷式與其他語言的差異。接下來下一篇要開始跟大家分享 go 的迴圈判斷式。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *