首页 > 其他 > 详细

<7>Golang基础进阶——切片

时间:2020-04-25 14:38:05      阅读:39      评论:0      收藏:0      [点我收藏+]

Golang基础进阶——切片

切片( slice )——动态分配大小的连续空间

Go 语言切片的内部结构包含地址、大小和容量,切片是真正意义上的动态数组,而且是一个引用类型,切片指向一个底层数组。

切片的声明方式

var name []T

声明但未使用的切片的默认值是:nil。示例:

func main() {
var strList []string
fmt.Println(strList == nil)
}

从指定范围中生成切片

func main() {
var h [30]int
for i := 0; i < 30; i++ {
h[i] = i + 1
}
fmt.Println(h[10:15])
fmt.Println(h[20:])
fmt.Println(h[:2])
}

使用 make() 函数构造切片,格式如下:

make([]T, size, cap)
  • T: 切片类型
  • size:为这个类型分配多少元素
  • cap:容量,这个值的设定不影响size,只是提前分配空间,降低多次分配空间造成的性能问题。

示例:

func main() {
a := make([]int, 2)
b := make([]int, 2, 10)

fmt.Println(a, b)
fmt.Println(len(a), len(b))
}

提示:使用 make() 函数生成的切片一定发生了内存分配操作。但给定开始与结束位置的切片只是将新的切片结构指向已经分配好的内存区域,设定开始与结束为止,不会发生内存分配操作。

从数组/切片中切出来的切片容量

func main() {
arr := [...]int{0, 1, 2, 3, 4, 5, 6, 7}
s1 := arr[2:]
fmt.Println(s1) // [2, 3, 4, 5, 6, 7]

s1[0] = 100
fmt.Println(s1) // [100, 3, 4, 5, 6, 7]
fmt.Println(arr) // [0, 1, 100, 3, 4, 5, 6, 7]

s2 := arr[2:6]
fmt.Println(s2) // [100, 3, 4, 5,]

s3 := s2[3:6]
fmt.Println(s3) //[5,6,7]
s4 := s3[1:]
fmt.Println(s4)
fmt.Printf("len(s2)=%d, cap(s2)=%d\n", len(s2), cap(s2))
}
func main() {
var h [30]int
for i := 0; i < 30; i++ {
h[i] = i + 1
}
fmt.Println(h)
a := h[1:10] // [2 3 4 5 6 7 8 9 10]
fmt.Println(a)
b := a[3:5] // [5 6]
fmt.Println(b)
c := b[2:4]
fmt.Println(c)
fmt.Printf("c -- cap=%d\n", cap(c)) // c -- cap=24

}

 

<7>Golang基础进阶——切片

原文:https://www.cnblogs.com/Wshile/p/12772601.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!