前言
在Golang中有一种类型叫做slice
,通常称为切片
。那么这次我们就来看看切片的基础用法吧~
定义
在go语言中,切片定义是这样的:
var identifier []int
值得注意的是,上述定义方法的变量为nil
, 当然也可以这样直接创建:
identifier := make([]int, 0)
还可以指定切片的初始容量:
identifier := make([]int, 0, 10)
还可以简写:
identifier := []int{}
从数组切片:
arr := [5]int{0, 1, 2, 3, 4}
identifier := arr[1:3]
操作
添加元素
在golang中追加元素,会使用关键字append
来进行切片的元素添加:
func main() {
s := make([]int, 0, 0)
s = append(s, 1, 2, 3, 4)
fmt.Println(s)
}
输出结果为:
[1 2 3 4]
更改成员
func main() {
s := make([]int, 0, 0)
s = append(s, 1, 2, 3, 4)
fmt.Printf("更改前为:%v\n", s)
s[0] = 5
fmt.Printf("更改后为:%v\n", s)
}
输出结果为:
更改前为:[1 2 3 4]
更改后为:[5 2 3 4]
获取成员
func main() {
s := []int{1, 2, 3, 4, 5}
fmt.Printf("第1个元素为:%d\n", s[1])
fmt.Printf("倒数第二个元素为:%d\n", s[len(s)-2:len(s)-1][0])
fmt.Printf("最后一个元素为:%d\n", s[len(s) - 1])
fmt.Printf("最后一个元素为:%d\n", s[len(s)-1:][0])
}
append
值得注意的一点是,如果切片的容量超出原限制大小,则会重新分配底层数组,所以切片的指针地址也会随之变化:
func main() {
s := []int{1, 2, 3, 4, 5}
fmt.Printf("s原地址为:%p\n", s)
s = append(s, 6, 7, 8)
fmt.Printf("s添加元素后的地址为:%p\n", s)
s2 := make([]int, 0, 3)
fmt.Printf("s2定义原地址为:%p\n", s2)
s2 = append(s2, 1, 2, 3)
fmt.Printf("s2添加容量大小元素后地址为:%p\n", s2)
s2 = append(s2, 4, 5, 6)
fmt.Printf("s2添加超出容量大小元素后地址为:%p\n", s2)
}
输出结果为:
s原地址为:0xc000016120
s添加元素后的地址为:0xc000018140
s2定义原地址为:0xc00001a1e0
s2添加容量大小元素后地址为:0xc00001a1e0
s2添加超出容量大小元素后地址为:0xc000016150
后记
关于切片还有很多的用法,在本篇文章中只列举了最基本的一些用法,循序渐进。
最后,感谢您的阅读,谢谢!