golang slice 切片

lobo · 2019-06-20 17:23:37 · 1212 次点击 · 预计阅读时间 1 分钟 · 大约8小时之前 开始浏览    
这是一个创建于 2019-06-20 17:23:37 的文章,其中的信息可能已经有所发展或是发生改变。

// 字典
// 1、引用类型
// 2、var val map[string]int 其中 val 初始化值为nil,可读取,但写操作会引起恐慌
// 3、val03, ok := val["n3"] 其中 ok是否存在key:n3;val03是其值,不存在则为默认值
// 4、字典并不是并发安全

// 切片
// 1: 占用资源很小,引用类型
// 2: slice[a:b] 包含a索引值,不包含b索引值,默认容量上界索引为被操作对象容量上界索引
// 3: slice[a:b:c] 包含a索引值,不包含b索引值,容量上界索引为c
// 4: slice 只能向后扩展,不能向前扩展
// 5: slice append
// (1)某次操作未超过该slice容量上界索引,此次改变会更新原数组;
// (2)某次操作超过该slice容量上界索引则新的被操作对象数组会被新建,此次改变不会更新原数组
numArr := [10]uint{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
slice0 := numArr[3:9]             // 容量上界索引为10
slice1 := numArr[3:6:8]           // 容量上界索引为8
slice1 = append(slice1, 100)      // 此次 未超过该slice容量上界索引 更新原数组, 不新建数组
slice1 = append(slice1, 100, 100) // 此次 超过该slice容量上界索引 不更新原数组, 新建数组

for i := 0; i < len(slice0); i++ {
    fmt.Println(i, slice0[i])
}
fmt.Println("slice0 ==>", len(slice0), cap(slice0))

for i := 0; i < len(slice1); i++ {
    fmt.Println(i, slice1[i])
}
fmt.Println("slice1 ==>", len(slice1), cap(slice1))


运行结果:

0 3
1 4
2 5
3 100
4 7
5 8
slice0 ==> 6 7
0 3
1 4
2 5
3 100
4 100
5 100
slice1 ==> 6 10

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1212 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传