# 來學點 Go ! ###### tags: `Go` ### 前情提要 * 資料參考 > [初學 Golang 30 天](https://ithelp.ithome.com.tw/articles/10155678) * 分點章節 > [來學點 Go !](/PHSJz1oER0S1Z4COWM0eyA) > [來學點 Go !!](/V39Yd1B1RK-fUjAYEyJJLQ) ### 環境安裝 * 作業系統: Ubuntu 18.04 * 官網安裝頁 [Link](https://golang.org/doc/install) * 環境變數 ```shell $ export PATH=$PATH:/usr/local/go/bin ``` * 測試環境 ```shell $ go version go version go1.17.1 linux/amd64 ``` ### Hello World.go * 嘗試編寫第一個程式 hello.go ```go package main import "fmt" func main() { fmt.Println("Hello, World") fmt.Println("哈囉!世界!") } ``` * 嘗試執行它 ```shell $ go run hello.go Hello, World 哈囉!世界! ``` ### 想說點什麼宣告 (var) * 基礎宣告 ```go var x int ``` * 宣告並給予初始值 ```go var x int = 10 ``` * 宣告多個變數 ```go var x int, y string var x, y, z int = 1, 2, 3 ``` * 簡短宣告 ```go x := 10 x, y, z := 10, true, "10" ``` * 宣告陣列 ```go // 基礎 var x [1]int x[0] = 0 fmt.Println(x) /** * 印出結果 * [0] */ // 賦值 y := []float64{1, 2, 3, 4, 5} fmt.Println(y) /** * 印出結果 * [1 2 3 4 5] */ ``` * 程式範例 [Link](https://play.golang.org/p/yfKs5dfv8dQ) ```go package main import ( "fmt" ) /** * echo x:(int)1, y:(bool)true, z:(string)3 */ func main() { x, y, z := 1, true, "3" fmt.Printf("x:(%T)%v, y:(%T)%v, z:(%T)%v\n", x, x, y, y, z, z) } ``` ### 轉點什麼迴圈 (for) * For ```go // 範例1: 一般的for sum := 0 for i := 0; i < 5; i++ { // 做點你想在迴圈內做的, ex: 數字加個N次 sum++ fmt.Printf("for(%d) sum => %d\n", i, sum) /** * 印出結果 * for(0) sum => 1 * for(1) sum => 2 * for(2) sum => 3 * for(3) sum => 4 * for(4) sum => 5 */ } // 範例2: 像是 while 的 for for sum > 1 { fmt.Println(`sum =>`, sum) sum-- } fmt.Println(`sum =>`, sum) /** * 印出結果 * sum => 5 * sum => 4 * sum => 3 * sum => 2 * sum => 1 */ // 範例3: 無窮的 for for { sum++ if sum >= 5 { fmt.Println(`sum =>`, sum, `break for`) break } fmt.Println(`sum =>`, sum) } /** * 印出結果 * sum => 2 * sum => 3 * sum => 4 * sum => 5 break for */ ``` ### 來點變化的匹配 (map) * 有 string key 的陣列 ```go users := map[int]string { 0: "A1", 1: "B2", 2: "C3", // 注意最後一個元素需要保留, 4: "E5", } fmt.Print(users, "\n") /** * 印出結果 * map[0:A1 1:B2 2:C3 4:E5] */ ```