Go 切片的开闭原则
前言
今日在工作中踩了一个小坑,关于数组切片的,主要是切片开闭原则的,当年面试的时候考过,但是后来没有仔细研究,这里补足一下。...arr3)
arr4 := arr[4:]
fmt.Printf("len: %d, cap: %d, %p, %+v\n", len(arr4), cap(arr4), arr4, arr4)
}
Go...0xc00010c000, [0 1 2]
len: 2, cap: 8, 0xc00010c008, [1 2]
len: 5, cap: 5, 0xc00010c020, [4 5 6 7 8]
总结
沟通一个切片的开闭...,需要约定一个前提: 语境的开始从0开始,开始从1开始(通常情况从下标0开始)
如果从0开始,那么左闭右开
如果从1开始,那么 左开右毕
数组截取切片,关于切片内存地址
如果下标从头开始截取(下标:0)...,则与远数组同一个指针
如果下标非从头开始截取,则会产生一个新的内存指针
切片长度(len)与容量(cap)
长度为切片元素个数
容量为截取位置开始至原数组结尾(类同arr[5:])
截取数组剩余所有