map作為全域性變數賦值 程式猿學GO Map

2021-10-11 15:10:00 字數 3281 閱讀 2212

map 是 go 中的內建型別,它將鍵與值繫結到一起。可以通過鍵獲取相應的值。

可以通過將鍵和值的型別傳遞給內建函式 make 來建立乙個 map。語法為:make(map[keytype]valuetype)。(譯者注:map 的型別表示為 map[keytype]valuetype)例如:

personsalary := make(map[string]int)
上面的**建立了乙個名為 personsalary 的 map。其中鍵的型別為 string,值的型別為 int。

map 的 0 值為 nil。試圖給乙個 nil map 新增元素給會導致執行時錯誤。因此 map 必須通過 make 來初始化(譯者注:也可以使用速記宣告來建立 map,見下文)。

package main

import (

"fmt")

func main()

}

插入元素給 map 的語法與陣列相似。下面的**插入一些新的元素給 map personsalary。

func main()
也可以在宣告時初始化乙個陣列:

func main() 

personsalary["mike"] = 9000

fmt.println("personsalary map contents:", personsalary)

}

string 並不是可以作為鍵的唯一型別,其他所有可以比較的型別,比如,布林型別,整型,浮點型,複數型別都可以作為鍵。

根據鍵獲取值的語法為:map[key],例如:

func main() 

personsalary["mike"] = 9000

employee := "jamie"

fmt.println("salary of", employee, "is", personsalary[employee])

}

上面的程式非常簡單。員工 jamie 的工資被取出並列印。程式的輸出為:salary of jamie is 15000。

如果乙個鍵不存在會發生什麼?map 會返回值型別的 0 值。比如如果訪問了 personsalary 中的不存在的鍵,那麼將返回 int 的 0 值,也就是 0。

我們如何檢測乙個鍵是否存在於乙個 map 中呢?可以使用下面的語法:

value, ok := map[key]
上面的語法可以檢測乙個特定的鍵是否存在於 map 中。如果 ok 是 true,則鍵存在,value 被賦值為對應的值。如果 ok 為 false,則表示鍵不存在。

func main() 

personsalary["mike"] = 9000

newemp := "joe"

value, ok := personsalary[newemp]

if ok == true else

}

range for 可用於遍歷 map 中所有的元素

package main

import "fmt"

func main()

personsalary["mike"] = 9000

fmt.println("all items of a map")

for key, value := range personsalary

}

值得注意的是,因為 map 是無序的,因此對於程式的每次執行,不能保證使用 range for 遍歷 map 的順序總是一致的。

delete(map, key) 用於刪除 map 中的 key。delete 函式沒有返回值。

func main() 

personsalary["mike"] = 9000

fmt.println("all items of a map")

delete(personsalary, "steve")

for key, value := range personsalary

}

map 的大小

用內建函式 len 獲取 map 的大小:

func main() 

personsalary["mike"] = 9000

fmt.println("length is", len(personsalary))

}

map 是引用型別與切片一樣,map 是引用型別。當乙個 map 賦值給乙個新的變數,它們都指向同乙個內部資料結構。因此改變其中乙個也會反映到另乙個:

func main() 

personsalary["mike"] = 9000

fmt.println("original person salary", personsalary)

newpersonsalary := personsalary

newpersonsalary["mike"] = 18000

fmt.println("person salary changed", personsalary)

}

將 map 作為引數傳遞給函式也是一樣的。在函式中對 map 的任何修改都會影響在呼叫函式中看到。

• 比較 map

map 不能通過 == 操作符比較是否相等。== 操作符只能用來檢測 map 是否為 nil。

func main() 

map2 := map1

if map1 == map2

}

上面的程式將會報錯:invalid operation: map1 == map2 (map can only be compared to nil)。

比較兩個 map 是否相等的方式是一一比較它們的元素是否相等。大家自己實現一下即可。

//判斷兩個map是否相等

func mapandmap(mymap1 map[string]int, mymap2 map[string]int) bool

//判斷值是否相同

for key, value := range mymap1

} return true

}

javer學c 全域性函式, 全域性變數

extern 全域性c c 中函式預設就是全域性的,變數寫在函式外的話預設也是全域性的.global.cpp,定義乙個全域性變數和乙個全域性函式 c include using namespace std int g int 10 void globalmethod 全域性函式的宣告需要使用exte...

為全域性變數賦值 關於多執行緒使用全域性變數的問題

coding utf 8 import threadingimport time 定義乙個全域性變數g num 0def test1 num global g num for i in range num g num 1 print g num def test2 num global g num ...

解決Ajax全域性變數賦值的問題

在做專案的過程中,以下 在1處a為0。然後通過乙個ajax請求乙個值為1的data賦予a,在2處a為1。然後來到3這裡的時候,a還是為0。通過查詢網路,得出原因是ajax預設的是非同步傳輸資料,在2處的a的scope只在ajax方法內部。1 var a 0 ajaxsetup get a.actio...