用过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不可能想不到,果真,能够用...
方法来省略掉中括号的数值,这样编译器会自动肯定数组中的元素。ui
array := [...]string{"a", "b", "c", "d"}
fmt.Print(array) //output [a b c d]
复制代码
数组已经定义了,来看一下怎么遍历,在PHP中经过foreach
进行遍历。spa
$array = ["a", "b", "c", "d"];
foreach($array as $k => $v) {
echo $v;
}
//output abcd
复制代码
Go的写法很相似,经过range
进行遍历,只是语法看起来有点怪怪的。3d
array := [...]string{"a", "b", "c", "d"}
for k, v := range array {
fmt.Print(k, v)
}
//output 0a1b2c3d
复制代码
在Go中没有使用的变量在编译时会报错,那遍历时的k不见得会用到,那怎么解决变量k未被使用的问题呢?其实可使用Go内置的符号_
来替换掉变量k,它的意思是把当前赋的值丢弃掉。code
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中更简单一些,能够直接取出第二到第四个元素之间的数据,值得注意的是,取出来的已经不是数组了,叫作切片,记住了,从数组切出来的部分就叫切片,数组与切片最简单的区别就是:数组须要明确指定大小,切片不须要,数组是值传递,切片是地址传递。不过目前仍是把它当数组好了。内存
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在数组上的区别,感兴趣的同窗能够自行了解或关注我后续的文章。