数组定义用过PHP的同学应该很清楚,不管数据格式多么复杂,都可以用数组来表达,任何类型的数据都可以塞进去.这是工作的必需品。一部分装备,使用起来非常简单,易用性简直变态。$array=[1,'姓名',['性别'=>'男']];而在Go语言中则不同,数组是一块连续的内存区域,长度固定,这与C语言的概念是完全一致的,在声明数组的时候,首先要确定数组的长度,而其中的元素数组只能使用一种类型,心痛,我们不能再随心所欲地存储数据了。array:=[3]int{1,2,3}以上是Go语言中数组的定义方式,[3]表示数组的长度为3,int是数组中元素的类型,花括号中的元素为数组元素。记住元素的个数和类型一定要和前面的语句保持一致,否则会报错。除了这种方法,PHP中还有一种动态赋值的方法,代码如下。$array=[];$array[0]='name';$array[1]=1;print_r($array);//outputArray([0]=>name[1]=>1)Go语言也是可以做,但是别想那么多,更别想存储不同数据类型的元素(其实也没办法,后续文章会解释)。您可以通过var声明一个数组。数组的长度和类型是预先定义好的,然后就可以根据数组的下标来赋值了。不需要给每一个下标都赋值,但是要记住下标不能超过边界,否则会报错。vararray[3]stringarray[0]="name"array[1]="sex"fmt.Print(array)//output[namesex]每次声明一个数组,统计元素个数,写进去括号太鸡肋了,这是Go想不到的。果然可以使用...方法省略括号中的值,这样编译器会自动判断数组中的元素。array:=[...]string{"a","b","c","d"}fmt.Print(array)//output[abcd]数组的遍历数组已经定义好了,我们看看如何遍历,遍历PHP中的foreach。$array=["a","b","c","d"];foreach($arrayas$k=>$v){echo$v;}//输出abcdGo写法类似,通过range遍历,但是语法看起来有点奇怪。array:=[...]string{"a","b","c","d"}fork,v:=rangearray{fmt.Print(k,v)}//在Go中输出0a1b2c3d没有用到的变量在编译的时候会报错,所以遍历的时候可能没有用到k,那么怎么解决变量k没有用到的问题呢?其实可以用Go内置的符号_来代替变量k,也就是丢弃当前赋值的意思。array:=[...]string{"a","b","c","d"}for_,v:=rangearray{fmt.Print(v)}//输出abcd数组截取PHP中数组截取,使用了array_slice函数。下面的代码从数组的第二个元素开始,截取两个元素。$array=[1,2,3,4,5];print_r(array_slice($array,1,2));//outputArray([0]=>2[1]=>3)在Go中比较简单一些,可以直接取出第二个和第四个元素之间的数据。值得注意的是,取出来的不再是数组,它被称为切片。请记住,从数组中切出的部分称为切片,数组和切片最简单的区别是:数组需要显式指定大小,切片不需要,数组按值传递,切片按地址传递。但就目前而言,最好将其视为一个数组。array:=[...]int{1,2,3,4,5}fmt.Print(array[1:3])添加到数组使用array_push函数将新元素添加到PHP中的数组。$array=[1,2,3,4,5];array_push($array,6);print_r($array);//outputArray([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[123456]删除数组元素在删除PHPArray元素很简单,直接unset即可,下面的代码是删除第二个元素。$array=[1,2,3,4,5];unset($array[1]);print_r($array);//outputArray([0]=>1[2]=>3[3]=>4[4]=>5)Go比较特殊的是它没有提供原生的删除方法,只能利用切片的特性。我们定义被删除元素的索引为1,然后比较1之前的元素和1之后的元素拼接在一起的时候,过滤掉第一个元素。感觉这个实现方式有点投机取巧。我不知道为什么没有操作它的功能。index:=1array:=[]int{1,2,3,4,5}array=append(array[:index],array[index+1:]...)fmt.Print(array)//输出[1345]以上就是PHP和Go在数组方面的区别。有兴趣的同学可以自学或者关注我的后续文章。
