本文摘自网络,作者,侵删。
Golang数组与切片
数组的声明
func main() {
var arr1 [3]int
fmt.Println(arr1)
var arr2 = [3]int{1, 2, 3}
var arr3 = [...]int{1, 2, 3}
fmt.Println(arr2, arr3)
}
[0 0 0]
[1 2 3] [1 2 3]
GolangGolang[...]int{1,2,3}
数组的传值
Golang中数组与C++中的容器类似,是值而不是指针和引用
func updateArr(arr [3]int) {
arr[0] = 100
}
func main() {
var arr1 [3]int
fmt.Println(arr1)
updateArr(arr1)
fmt.Println(arr1)
}
[0 0 0]
[0 0 0]
GolangGolang[3]int[4]int
指针传递
Golang中是支持指针
func updateArr(arr *[3]int) {
arr[0] = 100
}
func main() {
var arr1 [3]int
fmt.Println(arr1)
updateArr(&arr1)
fmt.Println(arr1)
}
[0 0 0]
[100 0 0]
通过指针可以进行数组的传递修改,同时和C语言不同的是对于数组指针来说不需要解引用
切片
Golang中的切片语法类似于Python,但是底层实现迥然不通
func updateArr(arr []int) {
arr[0] = 100
}
func main() {
var arr1 [3]int
fmt.Println(arr1)
updateArr(arr1[:])
fmt.Println(arr1)
}
[0 0 0]
[100 0 0]
Golang[]intGolang
Golang中的数组切片
Golang
func main() {
var arr1 = [10]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
fmt.Println(arr1)
sli1 := arr1[2:8]
fmt.Println(sli1, len(sli1), cap(sli1))
fmt.Println("slice [6]: ", sli1[6])
}
[0 1 2 3 4 5 6 7 8 9]
[2 3 4 5 6 7] 6 8
panic: runtime error: index out of range [6] with length 6
goroutine 1 [running]:
main.main()
c:/Users/zhangyu/Go/src/study/main.go:34 +0x21e
Process exiting with code: 2 signal: false
虽然切片的容量包括切片后的元素,但是访问报错
向切片添加元素
func main() {
var arr1 = [10]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
fmt.Println(arr1)
sli1 := arr1[2:8]
fmt.Println(sli1, len(sli1), cap(sli1))
sli2 := append(sli1, 10)
fmt.Println("sli2 [6]: ", sli2[6])
sli3 := sli1[6:7]
fmt.Println("sli3: ", sli3)
fmt.Println("arr1: ", arr1)
}
[0 1 2 3 4 5 6 7 8 9]
[2 3 4 5 6 7] 6 8
sli2 [6]: 10
sli3: [10]
arr1: [0 1 2 3 4 5 6 7 10 9]
- 切片可以追加元素,追加的元素会覆盖到原有的数组上去
- 再切片上再次切片,可以获得切片后的元素
append越界了会怎么样?
func main() {
var arr1 = [...]int{0, 1, 2, 3}
var sli1 = arr1[2:3:3]
sli1 = append(sli1, 4)
fmt.Println(arr1, sli1)
}
[0 1 2 3] [2 4]
cap
本文来自:简书
查看原文:Golang数组与切片
相关阅读 >>
更多相关阅读请进入《Go》频道 >>

老貘
一个与时俱进的Go编程知识库。