繼續研究 Go,這次會涵蓋 Map
和 Functions
Map
Map 是一個 Key Value 形式的格式,當沒有給予初始值時,預設值為 nil
,一樣可以使用 make
建立
1 2 3 4 5 6 7 8 9 10 11 12
| func main() { var m map[string]int if m == nil { fmt.Println("is nil") } m = make(map[string]int) fmt.Println(m) m["first"] = 1 fmt.Println(m) fmt.Println(m["first"]) }
|
給予初始值的方式與 struct 雷同,但須要多給 key 值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| type Vertex struct { Lat, Long float64 }
var m = map[string]Vertex{ "Bell Labs": Vertex{ 40.68433, -74.39967, }, "Google": Vertex{ 37.42202, -122.08408, }, }
var m = map[string]Vertex{ "Bell Labs": {40.68433, -74.39967}, "Google": {37.42202, -122.08408}, }
|
修改 Map 資料的方式也很直覺,直接根據 Key 值修改資料即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| func main() { m := make(map[string]int)
m["Answer"] = 42 fmt.Println("The value:", m["Answer"])
m["Answer"] = 48 fmt.Println("The value:", m["Answer"])
delete(m, "Answer") fmt.Println("The value:", m["Answer"])
v, ok := m["Answer"] fmt.Println("The value:", v, "Present?", ok) }
|
Functions
Go 裡面的 Function 也是一種型別,表示我們可以將 Function 傳入一個 Function 或是回傳一個 Function。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| func compute(fn func(float64, float64) float64) float64 { return fn(3, 4) }
func main() { hypot := func(x, y float64) float64 { return math.Sqrt(x*x + y*y) } fmt.Println(hypot(5, 12))
fmt.Println(compute(hypot)) fmt.Println(compute(math.Pow)) }
|
Function Closures 好像也是基本了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| func adder() func(int) int { sum := 0 return func(x int) int { sum += x return sum } }
func main() { pos := adder() for i := 0; i < 10; i++ { fmt.Println( pos(i), ) } }
|
小結
到這篇筆記為止,應該都算是 Go 的基礎篇,接下來的筆記都算是比較進階的內容。期待進入 Go 的進階世界