go语言的数组定义:
在这里插入图片描述
这是定义的一个一维数组,但是没有赋值给数组。
在这里插入图片描述
这也是定义的一个一维数组但是在定义的时候就依次赋值给数组了

在这里插入图片描述
这是go的计算数组的长度。

go中数组需要注意的是:

两个数组如果类型和元素个数相同可以赋值
数组名表示整个数组 数组名对应的地址就是数组第一个元素的地址
如果定义时用var arr [i]int 其中的i必须是一个常量,不能是一个变量

然后比较了一下Java中数组的定义和使用:
在这里插入图片描述
上面图中我直接用的是二维数据,采用了直接new和赋值的方法,还有数组长度计算的方法。

go中随机数的产生:
在这里插入图片描述
go中产生随机数首先要创建随机数种子,然后用Intn方法对10取模,这样你就可以得到0-9之间的数了。

Java中的随机数生成:
在这里插入图片描述
这是产生1-10之间的随机数。

二维数组的定义和使用,基本和一维数组一样,如下图:
在这里插入图片描述
切片
切片的数组很相似,切片可以自己扩充,但是数组不能自己扩充,数组和切片的定义比较,如下图:
在这里插入图片描述
他们的区别就在于数组有没有元素个数,数组定义的时候有元素个数,但是切片定义的时候却没有元素个数。这可能就是切片可以扩充的原因吧。

数组中不能越界,切片中同样不能越界:
在这里插入图片描述
图中的slice切片就越界了,这是一个需要注意的地方。
向切片中添加数据:
在这里插入图片描述
创建切片同样还有其他的两种方式创建:
1、
在这里插入图片描述
定义切片时可以指定长度。
2、
在这里插入图片描述
通过自动类型推导创建切片。

切片的地址和扩容

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
图片中的内容都是切片地址和扩容相关的。
注意:使用len(slice)来打印数据 不能使用cap(slice),因为len是切片的长度,而cap是切片的容量。

切片的截取

在这里插入图片描述
图中程序输出的结果为3,4,5,6,7,3就是起始的位置,而7就是切片中结束位置6然后+1

需要注意的是:
截取后的切片还是原始切片中的一块内容 如果修改截取后的切片 影响原始切片的值
所以如果我们截取切片过后然后修改值,原来切片的值也会发生改变。

如果想要切片的值不发生改变,就使用切片的拷贝。
在这里插入图片描述
我们先定义了一个slice的切片,然后使用make定义了一个容量为5的切片。然后使用cope将slice拷贝给s。
这样过后,如果你想要改变任何一个切片的值都不会对对方产生任何影响。

结论:如果想要定义的数很多并且固定了一个范围那么就用数组,如果没有定义一个固定的范围那么就用切片。