Tag go
Go | 型別(Type)
Go 的型別(Type)可以讓編譯器知道兩樣資訊: 需要使用的記憶體大小 這些記憶體所代表的內容 以內建的型別為例: 型別 記憶體大小 內容 int64 8 bytes 整數 float32 4 bytes IEEE-754 浮點數 bool 1 byte true OR false 有一些型別所代表的內容會跟著 build 機器的不同架構有所差異,例如同樣的 int 在 64 位元電腦裡佔 8 bytes 但在 32 位元電腦裡只佔 4 bytes。 自定義型別 Go 容許自定義型別,最簡單的宣告方式為 struct type user struct { name string email string ext int isAdmin bool } 使用 var ravi user 可以宣告一個 ravi 的變數,代表一個 user 型別。宣告的當下,型別的欄位值會使用各欄位之型別的零值。
Go | Map
Go 的 map 是鍵值對的資料結構。 // 宣告一個空白 map colors := map[string]string{} // 加入或修改鍵值對 colors["Yello"] = "#cc8500" // 刪除鍵值(鍵不存在時並不會噴錯誤) delete(colors, "Red") // 宣告一個空 map var numbers map[int]string numbers[1] = "One" // panic: runtime error: assignment ot entry in nil map 檢查鍵是否存在,如果指定的鍵不存在,會回傳零值給 value value, exists := colors["Blue"] if exists { fmt.Println(value) } else { fmt.Println(value) // "" } 迭代 map numbers := map[int]string{ 1: "one", 2: "two", 3: "three", } for key, value := range numbers { fmt.
Go | 切片(Slice)
切片(Slice)是操作其指向之陣列(Array)的物件。 [指標|長度|最大長度] // 切片 | [1,2,3,4,5] // 陣列 切片的初始化 // 宣告一個長度與最大長度都是 5 的字串陣列 slice1 := make([]string, 5) // 宣告一個長度為 3 最大長度為 5 的整數陣列 slice2 := make([]int, 3, 5) 長度不能大於最大長度,不然編譯器會噴錯誤。一般來說,宣告切片的同時也會同時賦值: // 宣告一個長度與最大長度為 3 的切片 slice1 := []string{"One", "Two", "Three"} // 宣告一個長度與最大長度為 100 的切片 slice2 := []string{99: ""} 空切片(nil slice)與空白切片(empty slice) 不管是空切片還是空白切片,標準函式庫裡的 append 、 len 跟 cap 的使用行為都一樣。 空切片(nil slice) 在 Go 程式中,空切片很常出現,通常被當成不存在資料時的回傳值,例如 return nilSlice, error。 空切片的宣吿方式: var slice []int 空切片長成這樣: 位置 0 1 2 用途 指標 長度 最大長度 值 nil 0 0 空白切片(empty slice) 空白切片通常是用來表達零資料集合,例如查詢資料庫後回傳零筆資料。空白切片的指標指向空陣列,所以並不會另外佔用記憶體。
Go | 陣列(Array)
Go 的陣列是連續空間內儲存了固定數目之相同型別物件的容器。當使用 var array [5]int 宣告時,陣列內儲存的型別或者長度都不能再改變,如果需要更多的空間來儲存新的物件,需要宣告一個新的陣列後把原先的值搬過去新的陣列。 在 Go 語言中宣告新的變數且無賦值時,這些變數所指向的物件都會以其零值(Zero Value)初始化。有關於 Go 的零值,請參考這邊。常用的零值: 類型 零值 數值 0 布林值 false 字串 "" 初始化陣列的同時賦值 // 宣告一個 array1 變數的 int 陣列,長度為 5 且值依序分別為 1,2,3,4,5 array1 := [5]int{1,2,3,4,5} // 宣告一個 array2 變數的 int 陣列,長度為 5 且值依序分別為 0,1,2,0,0 array2 := [5]int{1: 1, 2: 2} // 宣告一個 array3 變數的 int 陣列,長度為取決於賦值內容 // 如以下 array3 的長度為 3 array3 := [.