亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Golang > 正文

深入解析Go語言編程中slice切片結構

2020-04-01 19:13:34
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Go語言編程中slice切片結構,其中Append方法的用法介紹較為詳細,需要的朋友可以參考下
 

數組轉換成切片

復制代碼代碼如下:

a := [10]int{}
fmt.Println(a)
 s1 := a[:10]  //取前10個元素 [5:]取 5-最后的元素 
 fmt.Println(s1)

slice測試
復制代碼代碼如下:

a := []byte{'a', 'b', 'c', 'd', 'e', 'f', 'h'}
sa := a[2:5]
fmt.Println(string(sa))
sd1 := a[3:5]
fmt.Println(string(sd1)) //看看效果 

我們看到這樣的是slice_a指向Array_ori 其實是從c指向到k 我們用fmt.Println(cap(slice_a)) 結果肯定不是3

 

深入解析Go語言編程中slice切片結構

自己動手試一下下邊這個
 

復制代碼代碼如下:
   
        a := []byte{'a', 'b', 'c', 'd', 'e', 'f', 'h'}
 sa := a[2:5]
fmt.Println(string(sa))
 s := sa[1:3]
 fmt.Println(string(s))
 s2 := sa[3:5]
 fmt.Println(string(s2))

slice是指向底層的數組,如果多個slice指向同一個的時候,其中一個改變了,其他的都改變。試一下下邊這個
 
復制代碼代碼如下:

a := []int{1, 2, 3, 4, 5}
s1 := a[2:5]
s2 := a[1:3]
fmt.Println(s1, s2)
s1[0] = 9
fmt.Println(s1, s2)

 

切片是引用類型,即如果賦值切片給另一個切片,它們都指向同一底層數組。例如,如果某函數取切片參量,對其元素的改動會顯現在調用者中,類似于傳遞一個底層數組的指針。因此 Read 函數可以接受切片參量,而不需指針和計數;切片的長度決定了可讀數據的上限。這里是 os 包的 File 型的 Read 方法的簽名:

復制代碼代碼如下:

  func (file *File) Read(buf []byte) (n int, err os.Error)

此方法返回讀入字節數和可能的錯誤值。要讀入一個大的緩沖 b 的首32字節, 切片(動詞)緩沖。
復制代碼代碼如下:

      n, err := f.Read(buf[0:32])

這種切片常用且高效。實際上,先不管效率,此片段也可讀緩沖的首32字節。
復制代碼代碼如下:

      var n int
      var err os.Error
      for i := 0; i < 32; i++ {
          nbytes, e := f.Read(buf[i:i+1])  // Read one byte.
          if nbytes == 0 || e != nil {
              err = e
              break
          }
          n += nbytes
      }

只要還在底層數組的限制內,切片的長度可以改變,只需賦值自己。切片的容量,可用內部函數 cap 取得,給出此切片可用的最大長度。下面的函數給切片添值。如果數據超過容量,切片重新分配,返回結果切片。此函數利用了 len 和 cap 對 nil 切片合法、返回0的事實。

 


Apppend的用法
 

復制代碼代碼如下:

a := make([]int, 3, 6)
 fmt.Printf("%p", a)
 a = append(a, 1, 2, 3)
 fmt.Printf("%v %p/n", a, a)
 a = append(a, 1, 2, 3)
 fmt.Printf("%v %p/n", a, a)

我們必須返回切片,因為盡管 Append 可以改變 slice 的元素, 切片自身(持有指針、長度和容量的運行態數據結構)是值傳遞的。添加切片的主意很有用,因此由內置函數 append 實現。
復制代碼代碼如下:

  func Append(slice, data[]byte) []byte {
      l := len(slice)
      if l + len(data) > cap(slice) {  // reallocate
          // Allocate double what's needed, for future growth.
          newSlice := make([]byte, (l+len(data))*2)
          // Copy data (could use bytes.Copy()).
          for i, c := range slice {
              newSlice[i] = c
          }
          slice = newSlice
      }
      slice = slice[0:l+len(data)]
      for i, c := range data {
          slice[l+i] = c
      }
      return slice
  }

 

當slice中append追加的元素超過了指向的容量,就會重新指向一個新的底層數組,所以一個底層數組的改變,不會帶動其他的改變,試一下下邊的代碼 

復制代碼代碼如下:

a := []int{1, 2, 3, 4, 5}
s1 := a[2:5]
s2 := a[1:3]
fmt.Println(s1, s2)
s2 = append(s2, 1, 2, 2, 3, 3, 4, 5)
s1[0] = 9
fmt.Println(s1, s2)

copy
這是一個拷貝的函數,下邊的代碼是從s2拷貝到s1然后我們會看到結果是[7 8 9 4 5]
如果是copy(s2,s1) 我們看到的結果是[1 2 3]
 
復制代碼代碼如下:

s1 := []int{1, 2, 3, 4, 5}
s2 := []int{7, 8, 9}
copy(s1, s2)
fmt.Println(s1)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
538国产精品视频一区二区| 午夜免费在线观看精品视频| 一区二区av在线| 久久成人av网站| 97精品国产97久久久久久免费| 亚洲国产精品久久久久久| 精品动漫一区二区三区| 日日狠狠久久偷偷四色综合免费| 精品国产一区二区三区四区在线观看| 久久久av网站| 成人在线观看视频网站| 久久综合色影院| 国产精品国产自产拍高清av水多| 精品国产老师黑色丝袜高跟鞋| 国产精品美女免费看| 深夜福利一区二区| 2019国产精品自在线拍国产不卡| 亚洲大胆美女视频| 永久555www成人免费| 成人黄色免费在线观看| 亚洲欧洲中文天堂| 中文字幕在线精品| 亚洲石原莉奈一区二区在线观看| yw.139尤物在线精品视频| 欧美激情亚洲自拍| 国产精品福利在线观看| 欧美最猛性xxxxx(亚洲精品)| 日韩电影中文字幕一区| 亚洲free性xxxx护士白浆| 国产精品久久久久久久久久小说| 精品二区三区线观看| 国产精品美女无圣光视频| 亚洲大尺度美女在线| 性金发美女69hd大尺寸| 777精品视频| 亚洲天堂免费在线| 亚洲欧美中文日韩在线| 日韩精品丝袜在线| 国产日韩一区在线| 久久av.com| 日韩亚洲在线观看| 久久91精品国产91久久跳| 精品女厕一区二区三区| 国产97在线播放| 欧美成人免费在线观看| 欧美体内谢she精2性欧美| 在线观看亚洲视频| 一道本无吗dⅴd在线播放一区| 国产精品免费福利| 国产一区二区三区网站| 日韩高清欧美高清| 国产精品日日摸夜夜添夜夜av| 亚洲女人天堂色在线7777| 日韩中文视频免费在线观看| 成人网在线视频| 538国产精品一区二区在线| 亚洲欧美制服第一页| 国产精品极品美女粉嫩高清在线| 亚洲字幕一区二区| 欧美综合激情网| 青青草原成人在线视频| 亚洲人永久免费| 亚洲第一福利网站| 亚洲剧情一区二区| 日韩精品视频在线| 在线观看亚洲视频| 日韩亚洲国产中文字幕| 亚洲影影院av| 97在线视频国产| 日韩av在线不卡| 欧美激情精品久久久久久大尺度| 亚洲精品国产精品久久清纯直播| 91高清视频免费观看| 北条麻妃久久精品| 97久久精品视频| 亚洲欧美激情视频| 亚洲影院高清在线| 成人a级免费视频| 中文精品99久久国产香蕉| 久久久免费观看视频| 国产在线999| 日韩视频永久免费观看| 欧美大人香蕉在线| 欧美激情亚洲自拍| 日韩在线观看免费全集电视剧网站| 色爱av美腿丝袜综合粉嫩av| 97久久久免费福利网址| 性欧美在线看片a免费观看| 57pao国产成人免费| 欧美视频专区一二在线观看| 亚洲人午夜精品免费| 国产精品久久国产精品99gif| 国产精品99久久99久久久二8| 欧美大秀在线观看| 欧美有码在线视频| www日韩欧美| 欧美一级淫片播放口| 神马久久桃色视频| 国产精品久久久久av| 欧美猛男性生活免费| 国产婷婷97碰碰久久人人蜜臀| 黑人巨大精品欧美一区二区三区| 精品日韩美女的视频高清| 亚洲男人天堂古典| 日韩在线免费视频观看| 精品国产鲁一鲁一区二区张丽| 97精品欧美一区二区三区| 欧美极品少妇与黑人| 久久中文字幕在线| 国产精品678| 亚洲自拍欧美色图| 亚洲系列中文字幕| 久久久久久中文| 亚洲最新在线视频| 最近2019好看的中文字幕免费| 欧美黄网免费在线观看| 欧美日韩国产在线播放| 欧美影院成年免费版| 日本欧美国产在线| 九九精品在线观看| 欧美又大又硬又粗bbbbb| 欧美色视频日本版| 久久中文久久字幕| 中文字幕欧美日韩va免费视频| 欧美日韩一区二区精品| 亚洲精品乱码久久久久久按摩观| 国内精品伊人久久| 久久久久亚洲精品成人网小说| 亚洲欧美激情另类校园| 欧美性生活大片免费观看网址| 亚洲欧美成人一区二区在线电影| 欧美视频中文在线看| 欧美高清视频免费观看| 亚洲精品wwwww| 欧美自拍大量在线观看| 欧美成年人视频网站| 91免费看片在线| 午夜精品久久久久久久男人的天堂| 17婷婷久久www| 亚洲性69xxxbbb| 精品日韩视频在线观看| 97超级碰碰人国产在线观看| 久久精品久久精品亚洲人| 欧美中文在线字幕| 日韩在线视频线视频免费网站| 亚洲电影在线观看| 97超碰蝌蚪网人人做人人爽| 国产亚洲视频在线观看| 亚洲人成网在线播放| 欧美激情中文字幕乱码免费| 亚洲精品一区久久久久久| 久久综合国产精品台湾中文娱乐网| 国产精品视频久| 日日骚久久av| 亚洲国产精彩中文乱码av在线播放| 日韩在线视频免费观看| 欧美中在线观看| 久久亚洲国产精品| 国产精品7m视频| 夜夜嗨av一区二区三区免费区| 热门国产精品亚洲第一区在线| 97免费中文视频在线观看| 国产精品欧美激情| 日韩精品高清在线观看|