返回介绍

03.3.6 使用切片的代码示例

发布于 2024-08-14 12:50:32 字数 3978 浏览 0 评论 0 收藏 0

希望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,打印出来就是空的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文