Go 起手式之一


Posted by Nacho on 2020-03-28

變數宣告

Go的變數宣告又兩種方式,其中短變數宣告比較特別,由於沒有指明特定型別,因此,Go會依據等號右邊的值來決定變數的型別(參考)。此外,短變數宣告不能寫在函式外面否則會出錯。

// 第一種: 常見的變數宣告
var a int // 沒有指定初始值就會預設為 0
var a int = 1 // 給定初始值 1
// 第二種: 短變數宣告(Short variable declarations)
message := "hello world"

另外是多個變數的宣告(節省空間用)

var b,c int = 2, 3

(補充)宣告後得到空值(Zero values)的情況

var i int     // 印出 0 
var f float64 // 印出 0
var b bool    // 印出 false
var s string  // 印出 ""
fmt.Printf("%v %v %v %q\n", i, f, b, s)

函式

Go的程式是由Package組成的,以先前的 hellow world 例子來說,程式從 main package 開始,接著引入內建的 library ,並在 main() 這個主程式的函式開始執行。

package main

import "fmt"

func main() {
    fmt.Println("Hello World")
}

Go的函式的特色就是能夠接受多個回傳值,另外也能把函式當成變數傳給別人用。

// 帶入兩個參數,但同一種型別的省略寫法
// 當函式只有一個值要回傳時的寫法
func add(x, y int) int {  
    return x + y  
}  

// 當函式有一個以上的值要回傳時的寫法
func swap(x, y string) (string, string) {  
    return y, x  
} 

func main() {  
    fmt.Println(add(42, 13)) 
    // 讓 a 跟 b 告別接收回傳值
    a, b := swap("hello", "world")  
    fmt.Println(a, b)  
}

流程控制

條件判斷: 給一隨機數印出是奇數或偶數

import "math/rand"

func randInt() int {
    return rand.Intn(100)   // 隨機跑出 0 ~ 100 的正整數
}

func main() {
    // 寫法一
    a := randInt() // 將函數指定為 a 的變數
    if a%2 == 1 {
        fmt.Println("a 是奇數")
    }else {
        fmt.Println("a 是偶數")
    }
    // 寫法二(加入短宣告寫法的簡略版)
    if a := randInt(); a%2 == 1 {
        fmt.Println("a 是奇數")
    }else {
        fmt.Println("a 是偶數")
    }
}

迴圈: 印出2的10次方

func pow(x, n int) int {
    result := 1
    // for 迴圈的寫法
    for i := 0; i < n; i++ {
        result *= x
    }
    // Go 沒有while迴圈,因為可以拿 for 來用
    result, i := 1, 0
    for i < n {
        result *= x
        i++
    }
    return result
}

func main() {
    result := pow(2, 10)
    fmt.Println(result) // 1024
}

延遲(Defer): 先印出hello,再印出world

以下的例子來說,defer 會等主函式執行完所有的函式後再回頭做defer 裡的工作。
有什麼用途呢?可以拿來例如釋放資源、停止資料庫連線之類的、調度程式執行的順序
後續會再有更多補充!!!

func main() {
    defer fmt.Println("world")

    fmt.Println("hello")
}

筆記參考

Larry Lu 的2019 iT 邦幫忙鐵人賽
官方文件


#Go Variable #Go Function #Go If/else #Go Loop #Go Defer







Related Posts

Python Virtual environment using Conda

Python Virtual environment using Conda

Day04 git 知己知彼

Day04 git 知己知彼

1661. Average Time of Process per Machine

1661. Average Time of Process per Machine


Comments