切片
1,切片可以修改大小
2,切片的拷贝不是单纯值的拷贝,一个切片指向了一个数组
切片的声明
切片截取
{,,,,,,,}
:
]
:]
切片截取例子
<>以前主要
slice1 []
slice2 []=([]),
slice3 []=([],)
{
([]),
([],)
([]),
, (slice4), (slice4) slice4)
, (slice5), (slice5) slice5)
slice4=={
, (slice4), (slice4) slice4)
slice6 !={
, (slice6), (slice6) slice6)
slice1=={
, (slice1), (slice1) slice1)
{
{,,,,,,,}
:]
]
:]
) {
, (x) (x), x)
利用切片截取进行删除
:],
(numbers)]
((numbers)/)
(numbers[:a], numbers[a+:]...)
切片与数组的拷贝对比
数组的拷贝是副本拷贝。对于副本的改变不会影响到
切片的拷贝很特殊,切片的副本仍然指向了相同的数组。所以,对于副本的修改会影响到相同的数组。
下面的例子说明
main
{
]{, , , }
{, , }
]=
]=
, a, , c)
, b, , d)
append添加元素
copy
毫无疑问,创建新的目标切片就会有新的指向的数组。数组的copy是对于不同的数组的值的拷贝
([], (numbers), (numbers)*)
(numbers1, numbers)
例子2
main
{
)
([], , )
(numbers, )
, numbers)
(numbers, , , , , , , )
, numbers)
{, , , , , , }
(numbers, s1...)
, numbers)
)
:]
, numbers)
(numbers)]
, numbers)
((numbers)/)
, a)
(numbers[:a], numbers[a+:]...)
, numbers)
)
([], (numbers), (numbers)*)
(numbers1, numbers)
, count)
, numbers1)
]=
(numbers1)]=
, numbers)
, numbers1)
, x []) {
)
, x, (x), (x), x)
疯狂切片原理
理解了下面代码到底输出什么,就理解了切片的原理。
main
, level ) {
level> {
(年代,fmt.Sprint(水平))
),水平,s)
{
,
输出结果:
参考资料:https://dave.cheney.net/2018/07/12/slices-from-the-ground-up
- <李>
<强>本文链接:强>,https://dreamerjonson.com/2018/11/20/golang-13-slice/
李> <李><强>版权声明:,强>本博客所有文章除特别声明外,均采用,CC 4.0 CN协议,许可协议。转载请注明出处!
李>