③ 数组和切片
本文即将看到:
⚬ --- 数组
⚬ --- 切片
⚬ --- append和copy
一、数组
1> 定义和使用
● var name [size]type
● var name [...]type //自动填充长度
● var name = [size]type{ } //初始化并定义
● name := [...]tpye{}
2> 数组的长度和遍历
● len(数组名) //获取数组长度
● for...range //遍历 也可以用for
for 下标,值 := range 数组名{ }
3> 多维数组
● name := [...]...[size]tpye{}
4> 值类型
Go中的数组是值类型,而不是引用类型。这意味着当它们被分配给一个新变量时,将把原始数组的副本分配给新变量。如果对新变量进行了更改,则不会在原始数组中反映。`
二、切片 (Slice)
1> 切片涵义
● 切片是一种方便、灵活且强大的包装器。切片本身没有任何数据。它们只是对现有数组的引用。
● 切片与数组相比,不需要设定长度,在[]中不用设定值,相对来说比较自由
● 从概念上面来说slice像一个结构体,这个结构体包含了三个元素:
指针,指向数组中slice指定的开始位置
长度,即slice的长度
最大长度,也就是slice开始位置到数组的最后位置的长度
2> 切片的语法
定义切片:
var identifier(标识符) []type //切片不需要说明长度。
使用make()函数来创建切片:
var slice []type = make([]type,len)
slice := make([]type, len) //简写
创建新切片:
slice = slice[start:end]
3> 修改切片
● slice没有自己的任何数据。它只是底层数组的一个表示。对slice所做的任何修改都将反映在底层数组中。
● 当多个片共享相同的底层数组时,每个元素所做的更改将在数组中反映出来。
4> 切片的长度和容量
len() //长度
cap() // 容量
一个切片在未初始化之前默认为 nil,长度为 0
三、append和copy
1>
● append 向slice里面追加一个或者多个元素,然后返回一个和slice一样类型的slice
● copy 函数copy从源slice的src中复制元素到目标dst,并且返回复制的元素的个数
2>
var num []int
nums := append(num, 0) //允许追加空切片
nums = append(nums, 1) //向切片添加一个元素
nums = append(nums, 2,3,4) //同时添加多个元素
num1 := make([]int, len(nums), (cap(nums))*2) //创建切片 num1 是之前切片的两倍容量
copy(num1,nums)// 拷贝 nums 的内容到 num1
//num1与nums两者不存在联系,nums发生变化时,num1是不会随着变化的。也就是说copy方法是不会建立两个切片的
联系的

浙公网安备 33010602011771号