一:闲话杂谈:
之前在学数组,结果意外的把[...]里面的...省略了,还自以为定义了一个数组。结果自己大错特错。前面不加...是表示切片。
所以现在要来了解一下两者的规则:
golang中数组和切片的区别:
- 切片时指针类型,数组是值类型
- 数组的长度是固定的,而切片不是(切片是动态的数组)ps:数组前面的[]里面不写数字,写成[...]可以动态推断长度的
- 切片比数组多一个属性:容量(cap)。数组和切片都通样有个len(),元素个数
- 切片的底层是数组
另外,根据第一点来看,切片是指针类型,那么在里面进行 操作都属于引用传递,会动态改变其中的值
数组呢,是值传递,按理来说并没有一直改变其中某个元素的值。
二:切片的几个用法:
2.1 类似于python里面,可以对一个可迭代对象用中括号进行取区间
numbers := []int{0,1,2,3,4,5,6,7,8}
fmt.Println("numbers[1:4] ==", numbers[1:4])
切片初始化
s :=[] int {1,2,3 }
直接初始化切片,[]表示是切片类型,{1,2,3}初始化值依次是1,2,3.其cap=len=3
s := arr[:]
初始化切片s,是数组arr的引用
s := arr[startIndex:endIndex]
将arr中从下标startIndex到endIndex-1 下的元素创建为一个新的切片
s := arr[startIndex:]
默认 endIndex 时将表示一直到arr的最后一个元素
s := arr[:endIndex]
默认 startIndex 时将表示从arr的第一个元素开始
s1 := s[startIndex:endIndex]
通过切片s初始化切片s1
s :=make([]int,len,cap)
以上粘贴自菜鸟驿站,哦不,菜鸟教程~。都很好理解,和python的用法基本一样的。
2.2 几个函数,len(),cap(),append(),copy()
由于python万物皆是对象,比如数组,直接就能调用.append方法,同js一样
a = []
a.append(1)
golang的话 写法就跟易语言一样的了,append函数等同于易语言的加入成员(数组变量,成员变量)
var numbers []int
numbers = append(numbers, 0)
对于copy方法:
numbers1 := make([]int, len(numbers), (cap(numbers))*2)
copy(numbers1,numbers)
第一个参数是待复制的切片,第二个是想要被复制的切片
至于len()方法和cap()方法,用于切片取长度和切片容量,其中容量是切片独有的,len()是通用的,这些无需多说了 吧。都会。