- 前言
- Go 与操作系统
- Go 内部机制
- Go 基本数据类型
- 4 组合类型的使用
- 5 数据结构
- 6 Go package 中不为人知的知识
- 7 反射和接口
- 8 Go UNIX 系统编程
- 08.1 关于 UNIX 进程
- 08.2 flag 包
- 8.2 flag 包
- 08.3 io.Reader 和 io.Writer 接口
- 08.4 bufio 包
- 08.5 读取文本文件
- 08.6 从文件中读取所需的数据量
- 08.7 为什么我们使用二进制格式
- 08.8 读取 CSV 文件
- 08.9 写入文件
- 08.10 从磁盘加载和保存数据
- 08.11 再看strings包
- 08.12 关于bytes包
- 08.13 文件权限
- 08.14 处理 Unix 信号
- 08.15 Unix 管道编程
- 08.16 遍历目录树
- 08.17 使用 ePBF
- 08.18 关于 syscall.PtraceRegs
- 08.19 跟踪系统调用
- 08.20 User ID 和 group ID
- 08.21 其他资源
- 08.22 练习
- 08.23 总结
- 9 并发 Goroutines、Channel 和 Pipeline
- 10 Go 并发-进阶讨论
- 11 代码测试、优化及分析
- 12 Go 网络编程基础
- 13 网络编程 - 构建服务器与客户端
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
03.3.6 使用切片的代码示例
希望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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论