咖啡伴侶

          呆在上海
          posts - 163, comments - 156, trackbacks - 0, articles - 2

          golang slice分割和append copy還是引用

          Posted on 2013-11-20 18:46 oathleo 閱讀(6672) 評(píng)論(1)  編輯  收藏 所屬分類: Golang
          1.slice1:= slice[0:2]
          引用,非復(fù)制,所以任何對(duì)slice1或slice的修改都會(huì)影響對(duì)方
          data := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
          data1 := data[0:2]
          data1[0] = 99
          fmt.Println(data1)
          fmt.Println(data)
          [99 2]
          [99 2 3 4 5 6 7 8 9 0]
          2.append
          append 比較特殊
          聲明:
          源slice= src
          添加slice = app
          結(jié)果slice=tar
          1)如果len(src) + len(app) <= cap(src)  src和tar 是指向同一數(shù)據(jù)引用 ,即修改src或tar,會(huì)影響對(duì)方
          2)否則 tar 是copy的方式 src + app ,即修改src或tar,不會(huì)影響對(duì)方
          無(wú)論哪種情況不會(huì)影響app,因?yàn)閍pp都會(huì)用copy的方式進(jìn)入tar
           
          func test2() {
          data := make([]int, 10, 20)
          data[0] = 1
          data[1] = 2
          dataappend := make([]int, 10, 20)//len <=10 則  result[0] = 99 會(huì) 影響源Slice
          dataappend[0] = 1
          dataappend[1] = 2
          result := append(data, dataappend...)
          result[0] = 99
          result[11] = 98
          fmt.Println("length:", len(data), ":", data)
          fmt.Println("length:", len(result), ":", result)
          fmt.Println("length:", len(dataappend), ":", dataappend)
          }

          Feedback

          # re: golang slice分割和append copy還是引用  回復(fù)  更多評(píng)論   

          2013-12-15 19:56 by xiaowanyee
          謝謝分享~~
          主站蜘蛛池模板: 洛宁县| 邵阳县| 成武县| 林口县| 高邮市| 汝南县| 娱乐| 阿克陶县| 锦屏县| 大厂| 南靖县| 昆明市| 杂多县| 延寿县| 盐城市| 桂东县| 剑阁县| 綦江县| 浪卡子县| 陕西省| 洞口县| 平南县| 宁明县| 定远县| 陵水| 雅江县| 阿尔山市| 宝山区| 石嘴山市| 西充县| 行唐县| 弥渡县| 北票市| 平江县| 临夏市| 南靖县| 云南省| 南投市| 拉孜县| 安泽县| 江都市|