美文网首页
go编程基础-切片

go编程基础-切片

作者: 郭某人1 | 来源:发表于2019-01-10 15:59 被阅读8次

切片-slice

1.其本身并不是数组,它指向底层的数组,作为变长数组的替代方案,可以关联底层数组的局部和全部为引用类型;
2.可以直接创建或从底层数组获取生成;
3.使用len() 获取元素个数,使用cap()获取容量;
4.一般使用make创建
5.如果多个slice指向相同底层数组,其中一个值改变会影响全部;
6.make([]T,len,cap),其中cap可以省略,则和len的值相同;

一、创建slice

1.声明一个空的slice
var s1 []int
输出 :[] 长度为0
2.从数组中获取slice
a := [10]int{} //长度为10的int数组
s1 := a[9] //取索引为9的元素
s1 := a[5:10] // 取索引为5,6,7,8,9的元素;:号之前为起始位置,之后为截至位置,包头不包尾;

s1 := a[5:len(a)]

s1 := a[5:] // 取索引为5和之后的元素;

s1 := a[:5]

s1 := a[0:5] // 取索引为5之前(不包含索引5)的元素;

3.make函数声明slice (比较正式)
s1 := make([]int,3,10) //make([]T,len,cap)cap初始容量,超过数组容量的分配长度,会以一倍的方式增容;
即:当s1的长度超过10小于20时cap扩容为20;

二、Reslice

  1. Reslice时索引以被Slice的切片为准;
    2.索引不可以超过被slice的切片的容量cap()值
    3.索引越界不会导致底层数组的重新分配而是引发错误;

三、Append函数

1.可以在slice尾部追加元素;
2.可以将一个slice追加到另一个slice尾部;
3.如果最终长度未超过追加到slice的容量则返回原始slice;
4.如果超过追加到的slice的容量则重新分配数组并拷贝原始数据;

s1 := make([]int, 3, 6) //元素个数为3,容量为6的slice
fmt.Printf("%p\n", s1)
s1 = append(s1, 1, 2, 3) //追加3个元素
fmt.Printf("%v %p\n", s1, s1)
//追加之后s1的容量为6,未超出原始容量,地址不变;

fmt.Println(a)*/
s2 := make([]int, 3, 6) //元素个数为3,容量为6的slice
fmt.Printf("%p\n", s2)
s2 = append(s1, 1, 2, 3,4,5) //追加3个元素
fmt.Printf("%v %p\n", s2, s2)
//追加之后s1的容量为8,超出原始容量,重新分配内存地址,拷贝原始数据,然后再追加;

四、Copy函数

s1 := []int{1, 2, 3, 4, 5, 6,7}
s2 := []int{8, 9, 10}
copy(s1, s2)    //将s2copy到s1
fmt.Println(s1) //[ 8 9 10 4 5 6 7]
copy(s2, s1)    //将s2copy到s1
fmt.Println(s2) //[1 2 3]

s1 := []int{1, 2, 3, 4, 5, 6, 7}
s2 := []int{8, 9, 10, 1, 1, 1, 1}
copy(s2[2:4], s1[1:3]) //将s1中索引为1到3的元素copy到s2中索引为2到4的位置,s2如果不指定位置则默认从0开始
fmt.Println(s2)        //[8 9 2 3 1 1 1]

相关文章

  • go编程基础-切片

    切片-slice 1.其本身并不是数组,它指向底层的数组,作为变长数组的替代方案,可以关联底层数组的局部和全部为引...

  • Golang资料整理

    视频 郝林-Go语言第一课 Go编程基础 Go Web 基础 Go名库讲解 社区 官网要翻墙 Github--Go...

  • go语言数组、切片、映射

    go的一些语法有点晦涩,这些很基础,做一下笔记 数组 数组声明 数组声明初始化 切片 切片的声明 切片的追加 切片...

  • go编程基础视频笔记-数组与切片map

    数组Array 定义数组的格式:var [n],n>=0数组长度也是类型的一部分,因此具有不同长度...

  • go语言学习

    基础 go的学习,感谢Go By Example、go网络编程与go语言标准库随着学习的深入,此文章持续更新......

  • 《golang高级编程》-读书笔记

    《Go语言高级编程》 作者 柴树杉 曹春晖 1.3 数组、字符串和切片 Go语言拷贝字符串,只是复制了底层字节数组...

  • Go语言第3天 - 常用数据类型

    以下内容部分参考自Go语言基础数据类型Go语言中的数组切片:特立独行的可变数组Go语言数据类型-数组Go标准容器之...

  • Go语言切片

    // //Go语言切片 // /* // go语言切片是对数组的抽象 // Go 数组的长度不可改变,在特定场景中...

  • Go语言基础之切片

    切片 切片(Slice)是一个拥有相同类型元素的可变长度的序列。它是基于数组类型做的一层封装。它非常灵活,支持自动...

  • Go编程基础

    Go的优点高效垃圾回收机制类型安全和内存安全(没有隐式转换,只能显示转换)快速编译(未使用包检测)轻松实现高并发支...

网友评论

      本文标题:go编程基础-切片

      本文链接:https://www.haomeiwen.com/subject/ljrarqtx.html