go string转数组_go语言学习笔记(16)-切片

切片介绍:

1)切片的英文是slice

2)切片是数组的一个引用,因此切片是引用类型,在进行传递时,遵守引用传递的机制。

3)切片的使用和数组类型,遍历切片、访问切片的元素和求切片的长度len(slice)都一样。

4)切片的长度是可以变化的,因此切片是一个可以动态变化的数组。

5)切片定义基本语法:

var 切片名 []类型

比如: var a []int

演示使用:切片使用方式1

go string转数组_go语言学习笔记(16)-切片_第1张图片

slice从底层来说,其实就是一个数据结构(struct结构体)

type slice struct{

ptr *[2]int

len int

cap int

}

切片使用方式2:通过make来创建切片。

基本语法:var 切片名 []type =make ([]type,len,cap)

go string转数组_go语言学习笔记(16)-切片_第2张图片

1)通过make方式创建切片可以指定切片的大小和容量

2)通过make方式创建的切片对应的数组是由make底层维护,对外不可见,即只能通过slice去访问各个元素。

切片使用方式3:定义一个切片,直接就指定具体数组。

5dd653c5f8c70fc2d2dafded731ed191.png

切片的使用

方式1和方式2的区别:

1)方式1直接饮用数组,这个数组是事先存在的,程序员可见。

2)方式2是通过make创建切片,make也会创建一个数组,是由切片在底层进行维护,程序员是看不见的。

切片的遍历

go string转数组_go语言学习笔记(16)-切片_第3张图片

切片的注意事项和细节

1)切片初始化时 var slice = arr[startIndex:endIndex]

说明:从arr数组下标为startIndex,取到下标为endIndex元素(不含arr[endIndex])

初始化数组简写:

1: var slice = arr[0:end] 可以简写 var slice = arr[:end]

2: var slice = arr[start:len(arr)] 可以简写 var slice = arr[start:]

3: var slice = arr[0:len(arr)] 可以简写 var slice = arr[:]

2)切片定义完后,还不能使用,因为本身是一个空的,需要让其引用一个数组,或者make一个空间供其使用

3)切片可以继续切片 比如 slice2 := slice[1:2]

4)用append 内置函数,可以对切片进行动态追加

go string转数组_go语言学习笔记(16)-切片_第4张图片

a8a1cd1567609ce38b987fc113029c1e.png

切片append操作底层原理分析:

1)切片append操作的本质就是对数组扩容

2)go底层会创建一个新的数组newArr(安装扩容后大小)

3)将slice原来包含的元素拷贝到新的数组newArr

4)slice重新引用到newArr

5)newArr是在底层维护的,程序员不可见。

切片的拷贝操作

go string转数组_go语言学习笔记(16)-切片_第5张图片

说明:copy(para1,para2) para1和para2必须是切片类型

string类型和silce类型应用

go string转数组_go语言学习笔记(16)-切片_第6张图片

string是不可变的,也就是说不能通过str[0]='z'方式来修改字符串

如果需要修改字符串,可以先将string->[]byte /或者[]rune->修改->重写转成string

go string转数组_go语言学习笔记(16)-切片_第7张图片

string转中文重写要用[]rune方式修改

go string转数组_go语言学习笔记(16)-切片_第8张图片

切片练习题:

编写一个函数接受一个n int,然后将斐波那契数列放进切片中并输出来。

go string转数组_go语言学习笔记(16)-切片_第9张图片

e950e67cba9652dc39689f357e2c3c43.png

你可能感兴趣的:(go,string转数组)