日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Slice的本质

發布時間:2023/12/4 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Slice的本质 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Slice的本質

我們先看下面的代碼,看看它的輸出是什么:

package mainimport "fmt"type Slice []intfunc (A Slice) Append(value int) {A = append(A, value) } func main() {mSlice := make(Slice, 10, 20)mSlice.Append(5)fmt.Println(mSlice) } //output: [0 0 0 0 0 0 0 0 0 0]

我們查看append()前后變量的地址值:

func (A Slice) Append(value int) {A1 := append(A, value)fmt.Printf("&A = %p &A1 = %p\n", A, A1) } //output: &A = 0xc000114000 &A1 = 0xc000114000

所以說append()之后返回的Slice,是不是原來的Slice?

其實,我們在make一個Slice的時候可以傳遞三個參數:數據、長度和容量,這里就要提到SliceHeader。

SliceHeader是Slice運行時的具體表現,它的結構定義如下:

type SliceHeader struct {Data uintptr //指向底層數據源數組Len intCap int }

那么我們可以將Slice轉換為SliceHeader,再來看看A和A1內部的值是否一致。

func (A Slice) Append(value int) {A1 := append(A, value)sh := (*reflect.SliceHeader)(unsafe.Pointer(&A))fmt.Printf("A Data:%d,Len:%d,Cap:%d\n", sh.Data, sh.Len, sh.Cap)sh1 := (*reflect.SliceHeader)(unsafe.Pointer(&A1))fmt.Printf("A1 Data:%d,Len:%d,Cap:%d\n", sh1.Data, sh1.Len, sh1.Cap) } //output: A Data:824634474496,Len:10,Cap:20 // A1 Data:824634474496,Len:11,Cap:20

會發現它們的Len是不一樣的,所以不是同一個Slice,因此使用append()并沒有改變原來的A,而是生成了一個新的A1,A只在Append()內有效,mSlice并沒有發生改變。這里正確的做法是讓Append()返回append()之后的結果。

Append returns the updated slice. It is therefore necessary to store the result of append

上面的例子中,設置的Len是10和 Cap 是20,Cap足夠大,所以內置的append()并沒有生成新的底層數組。

mSlice := make(Slice, 10, 10)

再運行后發現兩個Slice的Data不再一樣:

//output: A Data:824633852064,Len:10,Cap:10 // A1 Data:824634187776,Len:11,Cap:20

這是因為在append()的時候,發現Cap不夠,生成了一個新的Data數組,用于存儲新的數據,并且同時擴充了Cap容量。

總結

以上是生活随笔為你收集整理的Slice的本质的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 空姐吹箫视频大全 | 樱桃视频一区二区三区 | 蜜芽在线视频 | 自拍偷在线精品自拍偷无码专区 | 日本亚洲一区二区 | 综合精品在线 | 伊人久操视频 | 青青草超碰 | 污污小视频 | 亚洲91视频 | 久久久久一级 | 91在线观看成人 | 麻豆一区二区三区精品视频 | 国产中文字幕一区二区三区 | 99re免费视频精品全部 | 国产思思 | av电影在线观看网址 | 国产 欧美 日韩 | 97在线看| 中文字幕在线视频播放 | 欧美一区二区区 | 在线观看视频毛片 | 日本免费黄色大片 | 乱短篇艳辣500篇h文最新章节 | 在线观看 亚洲 | 欧美高清在线一区 | 性高潮免费视频 | 亚洲制服丝袜av | 久久在线播放 | 蜜桃视频久久 | 日美女逼逼| 午夜成人亚洲理伦片在线观看 | 欧美一区二区高清 | 欧美亚洲日本 | 捆绑最紧bdsm视频 | 黑人毛片网站 | 人妻少妇偷人精品无码 | 午夜视频在线网站 | 欧美成人免费高清视频 | 免费欧美一级片 | 69视频免费 | 青娱乐在线视频观看 | 毛片xxx| 国产成人免费电影 | av老司机福利 | www日本黄色| 日本不卡高字幕在线2019 | 伊人精品在线观看 | 一级一级黄色片 | www.九九九| 天堂av网手机版 | 欧美老女人视频 | 亚洲国产精品成人综合色在线婷婷 | 水多多在线 | 巨乳免费观看 | 国产一区二区在线不卡 | 欧美成人视 | 国产不卡网 | 韩国一区二区三区在线观看 | 亚洲一区二区三区电影 | 黄色大尺度视频 | 欧美日本激情 | 免费国产一区 | 天天热天天干 | 一区二区三区在线播放 | 欧日韩在线观看 | 天堂毛片| 偷操| 国产精品正在播放 | 无码少妇一区二区三区芒果 | 99这里只有精品 | 欧美精品乱码 | 五月婷婷一区二区三区 | 激情丁香六月 | 久久天天东北熟女毛茸茸 | 青娱乐导航 | 双性人hdsexvideos | 国产无遮挡免费视频 | 日韩一区在线播放 | 性欧美videos高清hd4k | 国产精品一区二区无码免费看片 | 国产午夜网站 | 插入综合网 | 日本特级黄色大片 | 国产亚洲精品精品国产亚洲综合 | 日韩精品大片 | 亚洲精品在线视频 | 九九视频国产 | 影音先锋中文字幕在线 | 国产精品v欧美精品v日韩精品 | 日韩av影片 | 黄色片视频| 可以免费看av的网址 | 日韩欧美中文字幕精品 | 国产欧美精品 | 国产三级午夜理伦三级 | av观看免费在线 | 日本韩国欧美一区 | 黄视频在线播放 |