Golang面试字符串、数组、切片知识( 二 )
- 引用类型 。 但自身是结构体 , 值拷贝传递 。
- 属性len表示可用元素数量 , 读写操作不能超过该限制 。
- 属性cap表示最大扩张容量 , 不能超出数组限制 。
- 如果slice==nil,那么len、cap结果都等于0 。
data := [...]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} slice := data[1:4:5]//[low:hight:max]
文章插图
slice len cap 用法
切片的创建使用语法:
make([]Type, length, capacity)make([]Type, length)[]Type{}[]Type{value1, value2, ..., valueN}
使用切片特别注意:- 切片的读写实际上对应的是底层的数组;
- 新切片依旧指向原底层数组 。
- 向 slice 尾部添加数据 , 返回新的 slice 对象 。
- 切片一旦超出原 slice.cap 限制 , 就会重新分配底层数组 , 即便原数组并未填满 。 通常以 2 倍容量重新分配底层数组 。 在?大批量添加数据时 , 建议?一次性分配?足够?大的空间 , 以减少内存分配和数据复制开销 。 或初始化?足够?长的 len 属性 , 改?用索引号进?行操作 。 及时释放不再使?用的 slice 对象 , 避免持有过期数组 , 造成 GC ?无法回收 。
对切片操作Copy和 Append 两个内置函数:
Slice Copy格式 , 在切片的末尾附加新元素 , 如果需要更大的容量 , 则增大切片 。
copy(destination, source []T) int
Slice Copy实例 , 让我们创建slice并增加其容量 。s := []int{1,2,3}// creates slice s == [1 2 3]t := make([]int, len(s), cap(s)*2)// creates new slice t, filled// with zero-values (0s for// int), of specified length// and capacitycopy(t, s)s = t// cap(s) == 3// cap(t) == 6
Slice Append 格式append(slice []Type, elements...Type) []Type
Slice Append实例 , 让我们将一个切片附加到另一个切片上 , 甚至不用担心其容量a := []string{"a", "b", "c"}b := []string{"x", "y", "z"}a = append(a,b...) // equivalent to "append(a, b[0], b[1], b[2])"//let's print it!fmt.Printf("%d %v", cap(a), a)// 6 [a b c x y z]
- Java学习:Java学习到什么程度可以进行面试
- Golang 切片综合指南
- 程序员面试金典17.05_go_字母与数字
- 安卓春招面经:二本渣院面试网易被拒,最终获腾讯阿里offer
- 「6」进大厂必须掌握的面试题-Hibernate
- 震惊!京东T4大佬面试整整三个月,才写了两份java面试笔记
- 安卓面试必备的JVM虚拟机制详解,看完之后简历上多一个技能
- 抄github上的golang代码被坑后,弄懂了gin的原理
- 面试官问:MySQL 的自增 ID 用完了,怎么办?
- 「3」Java面试-Servlet