Skip to content

Latest commit

 

History

History
89 lines (70 loc) · 2.07 KB

File metadata and controls

89 lines (70 loc) · 2.07 KB

使用切片的代码示例

希望slices.go中的代码能够扫除你对切片所有的困惑,本节代码分为5个部分。

第一部分包含切片的定义以及初始值的说明:

package main

import "fmt"

func main()  {
    aSlice := []int{1, 2, 3, 4, 5}
    fmt.Println(aSlice)
    integer := make([]int,2)
    fmt.Println(integer)
    integer = nil
    fmt.Println(integer)

第二部分展示了如何使用[:]以数组创建切片。注意,[:]操作只是引用指向数组,并没有创建一份数组的拷贝:

    anArray := [5]int{-1, -2, -3, -4, -5}
    refAnArray := anArray[:]

    fmt.Println(anArray)
    fmt.Println(refAnArray)
    anArray[4] = -100
    fmt.Println(refAnArray)

第三部分代码使用make()创建一个二维切片:

    s := make([]byte, 5)
    fmt.Println(s)
    twoD := make([][]int, 3)
    fmt.Println(twoD)
    fmt.Println()

Go自动将切片的元素值初始化为对应切片类型的零值,例如int类型的零值是0,切片的零值是nil。记住,多维切片的元素类型是切片!

slices.go的第四部分,你将看到初始化二维数组的方法:

    for i := 0; i < len(twoD); i++ {
        for j := 0; j < 2; j++ {
            twoD[i] = append(twoD[i], i * j)
    }
}

上述代码使用append()函数往切片中追加元素,切记不要使用不存在的索引值,否则你将看到panic:runtime error: index out of range

最后一部分代码展示了如何使用range关键字打印二维切片的所有元素:

    for _, x := range twoD {
        for i, y := range x {
            fmt.Println("i:", i, "value:", y)
        }
        fmt.Println()
    }
}

执行slices.go,你将看到如下输出:

$ go run slices.go
[1 2 3 4 5]
[0 0]
[]
[-1 -2 -3 -4 -5]
[-1 -2 -3 -4 -5]
[-1 -2 -3 -4 -100]
[0 0 0 0 0]
[[] [] []]
i: 0 value: 0
i: 1 value: 0
i: 0 value: 0
i: 1 value: 1
i: 0 value: 0
i: 1 value: 2

由于切片的零值是nil,所以二维切片中的切片元素被初始化为nil,打印出来就是空的。