本文摘自网络,作者,侵删。

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语言101

老貘

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