我是靠谱客的博主 幸福缘分,最近开发中收集的这篇文章主要介绍Go语言slice[a:b:c]用法注意事项,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

切片
// 1: 占用资源很小,引用类型
// 2: slice[a:b] 包含a索引值,不包含b索引值,默认容量上界索引为被操作对象容量上界索引
// 3: slice[a:b]的容量默认为被操作对象容量上界索引-a+1
//例如:从[1,2,3,4,5,6,7,8,9] 中取 slice[3,6],容量cap为	9-3+1 = 7
// 4: slice[a:b:c] 包含a索引值,不包含b索引值,容量上界索引为c
// 5:切片后的容量默认为: c-a 
// 例如:从[1,2,3,4,5,6,7,8,9] 中取 slice[3,6:7],容量cap为	7 - 3 = 4
//注意: c的值不能小于b,不能大于被操作对象容量上界
// 6: slice 只能向后扩展,不能向前扩展
// 7: slice append
// (1)某次操作未超过该slice容量上界索引,此次改变会更新原数组;
// (2)某次操作超过该slice容量上界索引则新的被操作对象数组会被新建,此次改变不会更新原数组
func main() {

	numArr := [10]uint{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
	slice0 := numArr[3:9]             // 容量上界索引为10
	slice1 := numArr[3:6:7]           // 容量上界索引为8
	
	fmt.Println("slice1 len ==>", len(slice1),"slice1 cap ==>", cap(slice1))

	slice1 = append(slice1, 100)      // 此次 未超过该slice容量上界索引 更新原数组, 不新建数组
	slice1 = append(slice1,  100) // 此次 超过该slice容量上界索引 不更新原数组, 新建数组,容量成倍增加

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

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


运行结果:

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



最后

以上就是幸福缘分为你收集整理的Go语言slice[a:b:c]用法注意事项的全部内容,希望文章能够帮你解决Go语言slice[a:b:c]用法注意事项所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部