Golang中怎么利用片对添加进行扩容

  介绍

Golang中怎么利用片对添加进行扩容,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

//,grow  grows 从而slice  s  so  that  it 还要于extra  more 价值观,分配//,more  capacity  if 只需要It  also  returns 从而old 以及new  slice 长度。   func 生长(s 价值,extra  int),(价值,,int, int), {   ,,,i0 :=, s.Len ()   ,,,i1 :=, i0  +额外的   ,,,if  i1  & lt;, i0  {   ,,,,,,,恐慌(“reflect.Append: slice  overflow")   ,,,}   ,,,m :=, s.Cap ()   ,,,if  i1  & lt;=, m  {   ,,,,,,,return  s.Slice (0, i1),钱数,i1   ,,,}   ,,,if  m ==, 0, {   ,,,,,,,m =,额外的   ,,,},{else    ,,,,,,,for  m  & lt;, i1  {   ,,,,,,,,,,,if  i0  & lt;, 1024, {   ,,,,,,,,,,,,,,,m  +=, m   ,,,,,,,,,,,},{else    ,,,,,,,,,,,,,,,m  +=, m /4   ,,,,,,,,,,,}   ,,,,,,,}   ,,,}   ,,,t :=, MakeSlice (s.Type (),, i1,,米)   ,,,(t, s)副本   ,,,return  t,钱数,i1   }//,Append  appends 从而values  x 用a  slice  s 以及returns 从而resulting 切片。//,As 去,拷贝,each  x # 39; s  value  must  be  assignable 用,片# 39;s  element 类型。   func 附加(s 价值,x ……值),Value  {   ,,,s.mustBe(片)   ,,,,,,i1  i0:=,增长(年代,,len (x))   ,,,for 我,j :=,钱数,,0;,小姐:& lt;, i1,,我,,j =, + 1,, j + 1, {   ,,,,,,,s.Index (i)这里(x [j])   ,,,}   ,,,return  s   }

首先将判断类型是否片,然后调用增长扩容,从l1 & lt;=m的判断可以发现确实容量足够的情况下,只是对原始数组建立一个新的片

但当容量不足时,可以看到只有在当前元素i0小于1024时,才是按2倍速度正常,否则其实每次只增长25%,代码验证如下:

func 主要(),{   ,,,str :=, (int [], 1023)   ,,,fmt.Println (len (str),帽(str))   ,,,str =,附加(str, 1)   ,,,fmt.Println (len (str),帽(str))   ,,,str =,附加(str, 1)   ,,,fmt.Println (len (str),帽(str))   }      输出:   1023年,1023年   1024年,2048年   1025年,2048年

初始容量已经达到1024后,只增长了256

func 主要(),{   ,,,str :=, (int [], 1024)   ,,,fmt.Println (len (str),帽(str))   ,,,str =,附加(str, 1)   ,,,fmt.Println (len (str),帽(str))   ,,,str =,附加(str, 1)   ,,,fmt.Println (len (str),帽(str))   }   输出:   1024年,1024年   1025年,1280年   1026,1280

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

Golang中怎么利用片对添加进行扩容