--- title: Golang 筆記 --- # Golang 筆記 How to write Go code? [See this](https://golang.org/doc/code.html) - 編譯原始碼為可執行檔 ``go build .`` - 執行 ``go run .`` - 查詢說明 `` go doc <pkg> <sym>[.<method>] `` 每個 ``.go`` 原始碼,都必須從 package 定義開始,而具有 ``package main`` 的 ``.go`` 原始碼是程式進入點。 ## Package package 中定義的函式,名稱必須是以大寫開頭,若函式名稱是小寫,那麼會是套件中才可以使用的函式。 ## import - 套件名稱指定別名 ex.``import f "fmt"`` - 若指定別名時使用 ``.``,就不需要套件名稱作為前置名稱 ex. ``f.Println("owo")`` -> ``Println("owo")`` - owo ### 遠端套件 ``main.go`` ``` Go = import "githubURL" ``` ### 本地套件 - 一個 package 可以有數個原始碼檔案 ``hi.go`` ``` Go= package goexample //存放點的資料夾名稱 Ex. ./src/goexample import "fmt" func Hi() { fmt.Println("Hi") } ``` ``hello.go`` ``` Go= package goexample import "fmt" func Hello() { fmt.Println("Hello") } ``` ``main.go`` ``` Go= package main import "goexample" func main() { goexample.Hi() goexample.Hello() } ``` ``go run main.go`` 輸出 ``` Hi Hello ``` ## 宣告 ### 基本變數 如果要同時宣告不同的變數,可以用小括弧把變數括起來,但是要換行。 ```go = var x, y, z = 10, "owo", 3.14 ``` ```go = var ( x int = 10 y string = "owo" z float64 = 3.14 ) ``` 兩種寫法皆通,也可省略型態,讓 go 自動判別 ### 短變數宣告 僅能在函式中使用,函式外所有語法必須以關鍵字做開始 ```go = x, y, z := 10, "owo", 3.14 ``` ### 常數 const 不同於變數 ``var``,宣告為常數後如未使用,執行時不會跳錯誤,但變數會。 ```go = const ( x = 10 y = 3.14 z = "Justin" ) ``` ### 字串 string 定義由唯讀的 UTF-8 編碼位元組構成,而 rune 用於儲存 Unicode,宣告後無法改變內容。 ```go = text := "Go語言" fmt.Println(text[0]) ``` 僅會輸出``97``,若要輸出字元的話,需要先將型態轉為 ``[]rune``(``int32`` 的別名),將 UTF-8 編碼的位元組,轉換為 Unicode 後輸出 ```go = text := "Go語言" cs := []rune(text) fmt.Printf("%c\n", cs[2]) // 語 ``` ### 陣列 建立陣列的方式是 ``[n]type``,其中 n 為陣列的元素數量,type 是元素的型態。例如: ```go = var x[]int //可以留空 var scores [10]int scores[0] = 90 scores[1] = 87 scores[2] = 92 ``` ```go = scores := [10]int{ 90, 87, 92, } ``` ## 迴圈 只有``for``迴圈一種,且不需要`()`,無窮迴圈則條件部份留空即可 ```go = sum := 0 for i := 0; i < 10; i++ { sum += i } ``` ## slice ``x := make([]type, 長度, 容量)`` ```go = sum := 0 for i := 0; i < 10; i++ { sum += i } ``` ## map ``var x map[keyType]valueType`` ```go = sum := 0 for i := 0; i < 10; i++ { sum += i } ```