在介紹完 go 的變數以及容器,接下來要開始進入程式邏輯判斷的部分,這部分內容與大部分語言相同,不外乎就是if
、else
、switch
相關的語法,所以接下來針對這細節部分加以說明。
本文同步放置於此
前面有針對邏輯判斷的語法做一個初步的介紹,所謂邏輯判斷語法不外乎就是if
、else
、switch
,所以接下來分別針對期內容作細部的說明。
這部分就是簡單的如果判斷是,如果成立就會執行區塊內的程式,請見以下例子
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")
}
}
簡單講就是將賦值,與判斷寫在同一個區塊,再以;
分隔開來,當;
後面的判斷成立時就會執行{}
的程式。
在介紹完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
這變數只存在if
、else
的判斷式之內,所以拿到底下使用會造成編譯失敗的狀況。到目前為止if
、else
的介紹將告一段落,接下來要介紹switch
的判斷式。
就如同if
、else
一樣,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
後的值相同則會執行case
與case
之間的程式,如果最後都沒成立會執行default
的程式,還有比較特別的地方是對於go
而言case
與case
之間不需要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)
}
}
那要如何修改上述例子呢,就把他當if
、else
來使用即可,就是不要在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 的迴圈判斷式。