posts - 134,comments - 0,views - 66616

1、切片

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

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

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

 

2、切片的定义

1
2
var 切片名 []类型
比如: var a []int

  

3、切片的使用

3.1 通过引用一个已声明好的数组

1
2
3
4
func main() {
    intArr := [...]int{0, 1, 2, 3, 4, 5, 6}
    slice := intArr[1:6]
}

slice是一个切片

intArr[1:6]表示引用到intArr这个数组

引用intArr数组的起始下标为1,最后的下标为3(但是不包含3

 

3.2 通过make来创建切片

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

参数说明:type就是数据类型,len为长度,cap为容量(可选),cap不小于len

1
2
3
4
5
6
func main() {
    var slice []int = make([]int, 5, 10)
    // slice必须make后才能使用
    slice[0] = 1
    slice[4] = 9
}

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

如果没有给切片的各个元素赋值,那么就会使用默认值,

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

 

3.3 直接指定具体数组,使用原理类似make方式

1
2
3
func main() {
    var slice []string = []string{"jake", "tom", "marry"}
}

  

3.4 切片可以继续切片

1
2
3
4
func main() {
    var slice []string = []string{"jake", "tom", "marry"}
    slice2 := slice[1:3]
}

   

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

1
2
3
4
5
6
7
8
9
func main() {
    var slice []string = []string{"jake", "tom", "marry"}
    slice = append(slice, "Lucy", "Lily")
    fmt.Printf("slice追加后=%v\n", slice)
    var slice2 []string = []string{"jake", "tom", "marry"}
    // 可以追加切片
    slice = append(slice, slice2...)
    fmt.Printf("slice追加切片slice2后=%v\n", slice)
}

输出:

1
2
slice追加后=[jake tom marry Lucy Lily]
slice追加切片slice2后=[jake tom marry Lucy Lily jake tom marry]

切片append操作的原理分析:

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

b.slice原来包含的元素拷贝到新的数组newArr

c. slice重新引用到newArr

注意newArr是底层来维护的,程序员不可见。

  

3.6 使用copy内置函数来实现切片的拷贝操作

1
2
3
4
5
6
func main() {
    var slice []int = []int{1, 2, 3, 4, 5}
    slice2 := make([]int, 10)
    copy(slice2, slice)
    fmt.Printf("slice2=%v\n", slice2)
}

  

4、stringslice

string底层是一个byte数组,本身是引用这个byte数组的切片 ,因此string也可以进行切片处理

1
2
3
4
5
func main() {
    str := "www.baidu.com"
    slice := str[10:]
    fmt.Printf("slice=%v\n", slice)
}

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

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

posted on   smile学子  阅读(103)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示