用過PHP的同窗應該很清楚,不管多麼複雜的數據格式均可以用數組來表達,什麼類型的數據均可以往裏塞,它是工做必備的一部分,使用很簡單,易用程度簡直變態。php
$array = [1, 'name', ['sex' => '男']];
在Go語言中就有所不一樣了,數組是一段固定長度的連續內存區域,與C語言概念徹底一致,在聲明數組時,要先肯定數組的長度,並且數組中的元素只能使用一種類型,心痛,咱們不再能爲所欲爲的存儲數據了。數組
array := [3]int{1, 2, 3}
以上是數組在Go語言中的定義方法,[3]
表明數組長度爲3,int
是數組中元素的類型,花括號中的是數組元素,切記元素個數與類型必定要與前面聲明的相符,不然會報錯。除了這種方式,PHP中還有一種動態賦值的方法,代碼以下。app
$array = []; $array[0] = 'name'; $array[1] = 1; print_r($array); //output Array ( [0] => name [1] => 1 )
Go語言也能作到,不過別想那麼多,要存儲不一樣數據類型的元素就別想了(其實也不是沒有辦法,後續文章講解)。能夠經過var聲明一個數組,數組的長度和類型提早定義好,接下來就能夠根據數組下標來賦值了,能夠沒必要爲每一個下標賦值,可是切記下標不能越界,不然會報錯。函數
var array [3]string array[0] = "name" array[1] = "sex" fmt.Print(array) //output [name sex ]
每次聲明數組時都要數一下元素個數寫在中括號裏也太雞肋了,這點Go不可能想不到,果真,能夠用...
方法來省略掉中括號的數值,這樣編譯器會自動肯定數組中的元素。3d
array := [...]string{"a", "b", "c", "d"} fmt.Print(array) //output [a b c d]
數組已經定義了,來看一下怎麼遍歷,在PHP中經過foreach
進行遍歷。code
$array = ["a", "b", "c", "d"]; foreach($array as $k => $v) { echo $v; } //output abcd
Go的寫法很相似,經過range
進行遍歷,只是語法看起來有點怪怪的。索引
array := [...]string{"a", "b", "c", "d"} for k, v := range array { fmt.Print(k, v) } //output 0a1b2c3d
在Go中沒有使用的變量在編譯時會報錯,那遍歷時的k不見得會用到,那怎麼解決變量k未被使用的問題呢?其實能夠使用Go內置的符號_
來替換掉變量k,它的意思是把當前賦的值丟棄掉。內存
array := [...]string{"a", "b", "c", "d"} for _, v := range array { fmt.Print(v) } //output abcd
PHP中對數組截取經過array_slice
函數,如下代碼是從數組的第二個元素開始,截取兩個元素。編譯器
$array = [1, 2, 3, 4, 5]; print_r(array_slice($array, 1, 2)); //output Array ( [0] => 2 [1] => 3 )
在Go中更簡單一些,能夠直接取出第二到第四個元素之間的數據,值得注意的是,取出來的已經不是數組了,叫作切片,記住了,從數組切出來的部分就叫切片,數組與切片最簡單的區別就是:數組須要明確指定大小,切片不須要,數組是值傳遞,切片是地址傳遞。不過目前仍是把它當數組好了。string
array := [...]int{1, 2, 3, 4, 5} fmt.Print(array[1:3])
在PHP中爲數組添加一個新元素使用array_push
函數。
$array = [1, 2, 3, 4, 5]; array_push($array, 6); print_r($array); //output Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 )
在Go中使用append
函數,注意這裏其實是對切片的添加而不是數組。
array := []int{1, 2, 3, 4, 5} array = append(array, 6) fmt.Print(array) //output [1 2 3 4 5 6]
在PHP中刪除數組元素很是簡單,直接unset
便可,如下代碼是刪除第二個元素。
$array = [1, 2, 3, 4, 5]; unset($array[1]); print_r($array); //output Array ( [0] => 1 [2] => 3 [3] => 4 [4] => 5 )
Go中比較特別,它並無提供原生的刪除方法,只能利用切片的特性,咱們定義刪除的元素索引爲1,而後將1前面的元素與1後面的元素拼接起來,就過濾掉了第1個元素,感受這種實現方式有點投機,不知道爲何不提供函數來操做。
index := 1 array := []int{1, 2, 3, 4, 5} array = append(array[:index], array[index+1:]...) fmt.Print(array) //output [1 3 4 5]
以上就是PHP與Go在數組上的區別,感興趣的同窗能夠自行了解或關注我後續的文章。