Go基础知识点(八) | 青训营笔记

102 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第10天.

切片的CRUD:

切片的增删改查

go语言切片元素的添加和删除:

切片是一个动态数组,可以使用append()函数来添加元素,go语言中并没有专门删除切片元素的方法,但是可以利用切片本身的特性来删除元素.由于,切片是引用类型,通过赋值的方式会改变原有的内容,go提供了copy()函数来拷贝切片.

1.添加元素:

使用append()函数,切片名=append(切片名,要添加的值)

var s1 = []int{}
s1 = append(s1, 100)
s1 = append(s1, 200)
s1 = append(s1, 300)
fmt.Println(s1)
image.png

2.删除元素:

方法: 切片名=append(切片名[:index],切片名[index+1:]...)

var s1 = []int{1, 2, 3, 4}
fmt.Println("原来的s1:", s1)

//删除3这个元素,索引为2
s1 = append(s1[:2], s1[3:]...)
fmt.Println("删除3元素后的s1:", s1)
image.png

3.更新元素:

直接赋值即可

//更新切片内容update
var s1 = []int{1, 2, 3, 4}
s1[1] = 100
fmt.Println(s1)
image.png

4.查询元素:

遍历查找即可.

//查询元素
var s1 = []int{1, 2, 3, 4, 5, 6}
key := 3
for i, v := range s1 {
   if v == key {
      fmt.Println("i:", i)
   }
}
image.png

5.拷贝元素:

假如将s2直接等于s1,那么s1,s2指向的是同一内存地址,如果改变s2的值,那么s1的值也会影响,这种不叫拷贝.

var s1 = []int{1, 2, 3, 4}
var s2 = s1
s2[0] = 200
fmt.Println("s1:", s1)
fmt.Println("s2:", s2)

image.png

我们可以使用copy()函数进行拷贝,但在拷贝之前,要给那个要拷贝的切片先分配好一样容量大小的内存空间.

//拷贝copy

var s1 = []int{1, 2, 3, 4}
fmt.Println("s1:", s1)
var s2 = make([]int, 3)
fmt.Println("复制前的s2:", s2)
copy(s2, s1)
fmt.Println("复制后的s2:", s2)
//更新s2中的内容,看看s1会不会也会改变?
s2[1] = 100
fmt.Println("s1:", s1)
fmt.Println("s2:", s2)
image.png