去语言渐入佳境[13]——切片

切片

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

<引用类=" mt-2x "> <李>

<强>本文链接:,https://dreamerjonson.com/2018/11/20/golang-13-slice/

<李>

<强>版权声明:,本博客所有文章除特别声明外,均采用,CC 4.0 CN协议,许可协议。转载请注明出处!

坝镅越ト爰丫砙13]——切片"

去语言渐入佳境[13]——切片