iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 6
1
Modern Web

30天就Go:教你打造LINE自動回話機器人系列 第 6

30天就Go(5):if, else以及switch

if, if else, else

如果...(if...)

最基本的概念,如果為true就執行,如果為false的話就不會執行:

if true {
    fmt.Println("This is true")
}
if false {
    fmt.Println("This line will not be executed")
}

// 輸出結果:This is true

相反(!)

在ture或false之前加上!,會使結果顛倒,true會變成false,false變成true

if !true {
    fmt.Println("This is !true")
}
if !false {
    fmt.Println("This is !false")
}

// 輸出結果:This is !false

如果...如果不是的話那就...(if...else...)

這邊將用一個範例,我有100元(myMoney),我想買的東西99元,寫一個if-else判斷式:

myMoney := 100
if myMoney > 99 {
    fmt.Println("I can buy it")
}
else {
    fmt.Println("I can't buy it")
}

// 輸出結果:I can buy it

如果...那如果...(if...else if...)

如果買冰淇淋後剩70元以上(可能還要買便當),那就買。那如果少於的話就不買了。

myMoney := 100
iceCream := 20
if myMoney - iceCream > 50 {
    fmt.println("buy it!")
}
else if myMoney - iceCream < 50 {
    fmt.println("sorry, I won't buy")
}

// 輸出結果:buy it!

如果...那如果...都不行的話那就...(if...else if...else...)

史上最盧的就是這種了
如果我的錢夠買法拉利那就買,不夠買法拉利的話,如果錢夠就買BMW,都不行的話就只好買Toyota

myMoney := 100
ferrari := 450
bmw := 250
toyota := 70

if myMoney > ferrari {
    fmt.Println("buy Ferrari")
}
else if myMoney > bmw {
    fmt.Println("buy BMW")
}
else {
    fmt.Println("buy Toyota")
}

// 輸出結果:buy Toyota

switch

承襲了C的概念,一樣有switch,而且用法也是相當的類似
switch在很多情況下可以取代if的功能,而且寫起來會更加簡潔

基本範例

自動打招呼大法:

myfriend := "Tony"
switch myFriend {
    case "Amy": 
        fmt.Println("Hi, Amy")
    case "Tony":
        fmt.Println("Hi bro")
    case "Jackey":
        fmt.Println("GO AWAY!")
}

輸出結果:Hi bro

要注意的是case中只需要:,並不需要{}來分隔

default

如果都不在case裡的情況就會執行default:

myfriend := "Jason"
switch myFriend {
    case "Amy": 
        fmt.Println("Hi, Amy")
    case "Tony":
        fmt.Println("Hi bro")
    case "Jackey":
        fmt.Println("GO AWAY!")
    default:
        fmt.Println("Nice to meet you, but who are you?")
}

輸出結果:Nice to meet you, but who are you?

fallthrough

在case中加入fallthrough,會接著執行下一個case
假設看到Amy的時候通常會看到Tony:

myfriend := "Jason"
switch myFriend {
    case "Amy": 
        fmt.Println("Hi, Amy")
        fallthrough
    case "Tony":
        fmt.Println("Hi bro")
    case "Jackey":
        fmt.Println("GO AWAY!")
    default:
        fmt.Println("Nice to meet you, but who are you?")
}

輸出結果:Hi, Amy
Hi bro

多重情況

如果多種case的處理方式都一樣,可以這樣寫
其實我也不知道這叫什麼,總之看範例:

myfriend := "Paul"
switch myFriend {
    case "Amy", "Emily",: 
        fmt.Println("Hi, beautiful gril")
    case "Tony", "Paul":
        fmt.Println("Hi bro")
}

輸出結果:Hi bro

沒有switch的對象

這個情況就有點像是if的功能了:

myMoney := 100
switch {
    case myMoney > 500:
        fmt.Println("buy Ferrari")
    case myMoney > 250:
        fmt.Println("buy BMW")
    default
        fmt.Println("buy Toyota")
}

輸出結果:buy Toyota

是不是跟剛剛有個if的範例有點像呢


上一篇
30天就Go(5):for迴圈
下一篇
30天就Go(6):淺談package
系列文
30天就Go:教你打造LINE自動回話機器人23

2 則留言

0
ip258852
iT邦新手 5 級 ‧ 2018-02-15 20:39:25

fallthrough 的例題有錯

發現錯誤真的不少... 但應該是故意的

像是有些地放沒「:」 或是 大小寫不一樣

應該是另一種強制你自己 Debug 的美意吧??...

0
tkunlin
iT邦新手 5 級 ‧ 2019-03-31 15:28:48

switch myFriend 應該為 switch myfriend

我要留言

立即登入留言