数组和切片
实际上就是个数组。
底层是一个数组,切片内有这个数组引用,和切片的信息。
var arrAge = [5]int{18, 20, 15, 22, 16}
var arrLazy = [...]int{5, 6, 7, 8, 22}//...可以忽略
var arrKeyValue = [5]string{3: "Chris", 4: "Ron"}
切片;
x、y是切片
改变x、y就是改变数组,向x、y添加数据也是改变数组。
make创建一个切片;
make([]int,len,cap),长度为len,底层数据的容量为cap
new、make在切片上的区别,
new分配数组的内存,返回指向数组的指针。
make,创建一个切片,切片内存储数组引用。
bytes包,
str1 := "1"
str2 := "5"
strbuffer := bytes.NewBufferString(str1)
strbuffer.Write([]byte(str1))
strbuffer.Write([]byte(str2))
fmt.Println(strbuffer.String())
结果为115
在原来str1的基础上添加的str1和str2
这种方式比其它的都快,因为其它的得拷贝。
切片的复制与追加
copy(des,res)//复制
append(slie , num,num1,num2)//元素(在append的第二个参数是个变长参数)
nums := []int{1,2,3,4,5}
append(slie, nums...)//列表传递,实参为变长参数
字符串生成字节切片
c := []byte(s)
b = append(b,s...)
获取字符串的某一部分
substr := str[start:end]
字符串是不可改变的,要想改变,首先得变为字节数组(rune数组也可以)。
字节数组对比函数
Compare
将切片 b 的元素追加到切片 a 之后 a = append(a,b...)
复制切片 a 的元素到新的切片 b 上
b = make([]T, len(a))
copy(b, a)
删除位于索引 i 的元素a = append(a[:i],a[i+1:])
切除切片 a 中从索引 i 至 j 位置的元素a = append(a[:i],a[j:])
为切片 a 扩展 j 个元素长度a = append(a,make([]T,j))
在索引 i 的位置插入元素x a = append(a[:i],append([]T{x},a[i:]...)...)
在索引 i 的位置插入长度为 j 的新切片 a = append(a[:i],append(make([]T,j),a[i:]...)...)
在索引 i 的位置插入切片 b 的所有元素a = append(a[:i],append(b,a[i:]..)...)
取出位于切片 a 最末尾的元素 x ,a = a[len(a)-1],a[:len(a)-1]
将元素 x 追加到切片 a a = append(a,x)