初識映射會很懵,由於在PHP中沒有映射類型的定義。其實沒那麼複雜,任何複雜的類型在PHP中均可以用數組表示,映射也不例外。php
$array['name'] = '平也'; $array['sex'] = '1'; $array['age'] = '10'; //output Array ( [name] => 平也 [sex] => 1 [age] => 10 )
映射其實就是有key有value的數組,在Go中的賦值也很相似,但須要提早聲明該映射類型的鍵與值的類型,確保全部的鍵和值的賦值類型統一,不然會報錯。數組
array := make(map[string]string) array["name"] = "平也" array["sex"] = "1" array["age"] = "10" fmt.Print(array) //output map[age:10 name:平也 sex:1]
在PHP中還有一種初始化數組的方法,就是將全部要存儲的鍵與值賦值給變量。函數
$array = [ 'name' => '平也', 'sex' => '1', 'age' => '10' ];
在Go中也有相似的初始化方法,但切記統一鍵與值的數據類型。code
array := map[string]string{ "name": "平也", "sex": "1", "age": "10", }
在PHP中其實就是遍歷數組的操做,foreach便可。string
$array = [ 'name' => '平也', 'sex' => '1', 'age' => '10' ]; foreach ($array as $key => $value) { print_r($array); } //output Array ( [name] => 平也 [sex] => 1 [age] => 10 ) Array ( [name] => 平也 [sex] => 1 [age] => 10 ) Array ( [name] => 平也 [sex] => 1 [age] => 10 )
在Go中也能夠像遍歷數組那樣遍歷map,依然使用range關鍵字。class
array := map[string]string{ "name": "平也", "sex": "1", "age": "10", } for v, k := range array { fmt.Print(k, v) }
上篇文章講到遍歷時能夠經過下劃線來忽略鍵或值,若是隻遍歷鍵,下劃線也能夠省略。效率
array := map[string]string{ "name": "平也", "sex": "1", "age": "10", } for k := range array { fmt.Print(k) } //output sexagename
PHP中能夠直接經過讀數組的key來取值。變量
$array = ['name' => 'pingye']; echo $array['name']; //output pingye
在Go中的操做是同樣的,與PHP不一樣的是,若是取了不存在的key,Go中默認輸出空值,在PHP中就會產生warning警告。foreach
array := map[string]string{ "name": "pingye", "sex": "1", "age": "10", } fmt.Print(array["name"]) //pingye
在PHP中的unset能夠刪除任何你想刪除的數組元素,很是好用。垃圾回收
$array = [ 'name' => '平也', 'sex' => '1', 'age' => '10' ]; unset($array['name']); print_r($array); //output Array ( [sex] => 1 [age] => 10 )
在Go中經過delete函數來刪除map中的元素。
array := map[string]string{ "name": "pingye", "sex": "1", "age": "10", } delete(array, "name") fmt.Print(array) //output map[age:10 sex:1]
在PHP中好像歷來沒有注意過是否把數組清空,很抱歉,我能想到的清空數組方法就是把空數組賦值給它。
$array = [ 'name' => '平也', 'sex' => '1', 'age' => '10' ]; $array = []; print_r($array); //output Array ( )
然而,在Go中也沒有提供清空map的函數,從新make一個map就好了,原來的map會被Go的垃圾回收機制清除掉,甚至比寫一個清空的函數效率還高。以上是PHP與Go在map映射方面的區別於聯繫,若是感興趣能夠自行了解嘗試。