iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 9
1
Modern Web

從零開始的點餐系統,Google好棒棒系列 第 9

[Day9] If、Switch、Defer

所有程式碼的最基礎邏輯運算元
我想非If莫屬了

If

傳言只要會If Else就會寫程式了(誤)

在C#與Java裡面我們用的格式如下

if (條件式) {
    條件成立的邏輯
} else {
    條件不成立的邏輯
}

而在Go中 我們只需要將條件式的括號省略即可

if 條件式 {
    條件成立的邏輯
} else {
    條件不成立的邏輯
}

但是這裡有一個更具特色的寫法

特色的寫法

package main

import (
	"fmt"
)

func main() {
	if i := geti(); i == 5 {
		fmt.Println("i是5")
	} else {
		fmt.Println("i不是5")
	}
}

func geti() int {
	return 6
}

可以在比較前去賦值 再進行邏輯的比較

特別注意else不可換行

Switch

Switch的特性跟If大同小異

格式

switch {condition}{
    case {Value1}:
        //logic
    case {Value2}:
        //logic
    default:
        //logic
}

方法1: 條件式寫法

package main

import (
	"fmt"
	"runtime"
)

func main() {
	switch os := runtime.GOOS; os {
	case "darwin":
		fmt.Println("OS X.")
	case "linux":
		fmt.Println("Linux.")
	default:
		fmt.Printf("%s.\n", os)
	}
}

方法2: 範圍式寫法

package main

import (
	"fmt"
	"math/rand"
)

func main() {
	i := rand.Intn(80)
	fmt.Println(i)
	switch {
	case i < 30:
		fmt.Println("index<30")
	case i < 60:
		fmt.Println("index<60")
	default:
		fmt.Println("index>60")
	}
}

先在外部宣告好判斷的變數
透過Case去宣告判斷的範圍並執行

Defer

Defer有點特別 他是當"當前"的Function執行完的時候
才會開始執行的意思

package main

import (
	"fmt"
)

func main() {
	fmt.Println("Start")
	test()
	fmt.Println("End")
}

func finish() {
	fmt.Println("Finish")
}

func test() {
	defer finish()
	fmt.Println("Test")
}

// OutPut
// ======
// Start
// Test
// Finish
// End

根據上面的範例Code 就可以知道它的原理了
defer也可以堆疊多次 他是Stack的概念

image alt

也就是所謂的後進先出 只要越後面宣告的 就會在結束時優先執行

結語

GoLang的語法大致上就介紹到這樣了
For迴圈此專案目前沒用到就沒特別寫出來了
詳細可以到Go的官網去參訪一下


上一篇
[Day8] 變數宣告&Function
下一篇
[Day10] 建立一個簡單的HttpServer
系列文
從零開始的點餐系統,Google好棒棒30

尚未有邦友留言

立即登入留言