代码改变世界

go 学习之切片

2020-12-16 15:04  Caoxt  阅读(92)  评论(0编辑  收藏  举报

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

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

切片的内存空间存放三块内容,第一块是数组的地址,第二块是数组的长度,第三块是数组的容量

切片可以继续切片

append动态添加内容到切片,返回新创建的切片(底层数组也重新创建),如果是将一个切片追加到另一个切片 newSlice = append(slice, slice...)

遍历的两种方式:for,for-range

copy(a, b)完成切片复制操作,相互独立,互不影响 。长度不够时不会报错(len(a)<len(b)),只拷贝len(a)个元素

创建切片的三种方式:

1、定义一个切片,然后让切片去应用一个已创建好的数组

 

        arr := [5]int{1, 3, 5, 7, 9}
        slice := arr[1:3]
        fmt.Println(slice)

 

2、通过make来创建切片

 

        slice := make([]int, 5, 8)
        slice = []int{1, 3, 5, 7}
        fmt.Println(slice)

 

3、简写创建方式:

        slice := []int{1, 3, 5, 7}
        fmt.Println(slice)

slice 与string:

a、string底层是byte数组,因此string也可以进行切片处理

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

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

 通过切片方式修改字符串内容

        str := "hello world"
        str1 := []byte(str)
        str1[0] = 'H'
        str2 := string(str1)
        fmt.Println(str2)
        str := "hello world"
        str1 := []rune(str)
        str1[0] = '我'
        str2 := string(str1)
        fmt.Println(str2)

  

  总结:

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

    如果没有给切片的各个元素赋值,那么就会使用默认值(0,“”, false)

 

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

 

方式1和方式2的区别:

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

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