Go日常食用之Slice切片基础用法|Go主题月

1,122 阅读2分钟

前言

在Golang中有一种类型叫做slice,通常称为切片。那么这次我们就来看看切片的基础用法吧~

定义

在go语言中,切片定义是这样的:

var identifier []int

值得注意的是,上述定义方法的变量为nil, 当然也可以这样直接创建:

identifier := make([]int, 0)

还可以指定切片的初始容量:

identifier := make([]int, 010)

还可以简写:

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

后记

关于切片还有很多的用法,在本篇文章中只列举了最基本的一些用法,循序渐进。

最后,感谢您的阅读,谢谢!