亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > golang中的空slice案例

golang中的空slice案例

熱門標簽:百度地圖標注后傳給手機 評價高的400電話辦理 外呼系統用什么卡 電話機器人軟件免費 壽光微信地圖標注 外呼系統顯本地手機號 阿克蘇地圖標注 涿州代理外呼系統 excel地圖標注分布數據

golang中允許對值為 nil 的 slice 添加元素

package main 
func main() {
 var s []int
 s = append(s, 1)
}

運行成功~

補充:golang slice 詳解

一、數組切片的使用

func main() {
	//1.基于數組創建數組切片
	var array [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
	var slice = array[1:7] //array[startIndex:endIndex] 不包含endIndex
	//2.直接創建數組切片
	slice2 := make([]int, 5, 10)
	//3.直接創建并初始化數組切片
	slice3 := []int{1, 2, 3, 4, 5, 6}
	//4.基于數組切片創建數組切片
	slice5 := slice3[:4]
	//5.遍歷數組切片
	for i, v := range slice3 {
		fmt.Println(i, v)
	}
	//6.len()和cap()
	var len = len(slice2) //數組切片的長度
	var cap = cap(slice)  //數組切片的容量
	fmt.Println("len(slice2) =", len)
	fmt.Println("cap(slice) =", cap)
	//7.append() 會生成新的數組切片
	slice4 := append(slice2, 6, 7, 8)
	slice4 = append(slice4, slice3...)
	fmt.Println(slice4)
	//8.copy() 如果進行操作的兩個數組切片元素個數不一致,將會按照個數較小的數組切片進行復制
	copy(slice2, slice3) //將slice3的前五個元素復制給slice2
	fmt.Println(slice2, slice3)
}

二、數組切片數據結構分析

數組切片slice的數據結構如下,一個指向真實array地址的指針ptr,slice的長度len和容量cap

// slice 數據結構
type slice struct {
	array unsafe.Pointer 
	len   int            
	cap   int            
}

當傳參時,函數接收到的參數是數組切片的一個復制,雖然兩個是不同的變量,但是它們都有一個指向同一個地址空間的array指針,當修改一個數組切片時,另外一個也會改變,所以數組切片看起來是引用傳遞,其實是值傳遞。

三、append()方法解析

3.1 數組切片不擴容的情況

運行以下代碼思考一個問題:s1和s2是指向同一個底層數組嗎?

func main() {
	array := [20]int{1, 2, 3, 4, 5, 6, 7, 8, 9}
	s1 := array[:5]
	s2 := append(s1, 10)
	fmt.Println("s1 =", s1)
	fmt.Println("s2 =", s2)
	s2[0] = 0
	fmt.Println("s1 =", s1)
	fmt.Println("s2 =", s2)
}

輸出結果:

s1 = [1 2 3 4 5]

s2 = [1 2 3 4 5 10]

s1 = [0 2 3 4 5]

s2 = [0 2 3 4 5 10]

由第一行和第二行結果看來,似乎這是指向兩個不同的數組;但是當修改了s2,發現s1也跟著改變了,這又表明二者是指向同一個數組。到底真相是怎樣的呢?

運行以下代碼:

import (
	"fmt"
	"unsafe"
)
type Slice struct {
	ptr unsafe.Pointer // Array pointer
	len int            // slice length
	cap int            // slice capacity
}
func main() {
	array := [20]int{1, 2, 3, 4, 5, 6, 7, 8, 9}
	s1 := array[:5]
	s2 := append(s1, 10)
	s2[0] = 0
	// 把slice轉換成自定義的 Slice struct
	slice1 := (*Slice)(unsafe.Pointer(s1))
	fmt.Printf("ptr:%v len:%v cap:%v \n", slice1.ptr, slice1.len, slice1.cap)
	slice2 := (*Slice)(unsafe.Pointer(s2))
	fmt.Printf("ptr:%v len:%v cap:%v \n", slice2.ptr, slice2.len, slice2.cap)
}

輸出結果:

ptr:0xc04205e0a0 len:5 cap:20

ptr:0xc04205e0a0 len:6 cap:20

由結果可知:ptr指針存儲的是數組中的首地址的值,并且這兩個值相同,所以s1和s2確實是指向同一個底層數組。

但是,這兩個數組切片的元素不同,這個可以根據首地址和數組切片長度len來確定不同的數組切片應該包含哪些元素,因為s1和s2雖然指向同一個底層數組,但是二者的len不同。通過這個demo,也驗證了數組切片傳參方式也是值傳遞。

3.2 數組切片擴容的情況:

運行以下代碼,思考與不擴容情況的不同之處,以及為什么

func main() {
	s1 := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
	s2 := append(s1, 10)
	fmt.Println("s1 =", s1)
	fmt.Println("s2 =", s2)
	s2[0] = 0
	fmt.Println("s1 =", s1)
	fmt.Println("s2 =", s2)
}

輸出結果:

s1 = [1 2 3 4 5 6 7 8 9]

s2 = [1 2 3 4 5 6 7 8 9 10]

s1 = [1 2 3 4 5 6 7 8 9]

s2 = [0 2 3 4 5 6 7 8 9 10]

根據結果我們發現,修改s2后,s1并未改變,這說明當append()后,s1和s2并未指向同一個底層數組,這又是為什么呢?

同樣,我們接著運行以下代碼:

import (
	"fmt"
	"unsafe"
)
type Slice struct {
	ptr unsafe.Pointer // Array pointer
	len int            // slice length
	cap int            // slice capacity
}
func main() {
	s1 := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
	s2 := append(s1, 10)
	fmt.Println("s1 =", s1)
	fmt.Println("s2 =", s2)
	s2[0] = 0
	fmt.Println("s1 =", s1)
	fmt.Println("s2 =", s2)
	// 把slice轉換成自定義的 Slice struct
	slice1 := (*Slice)(unsafe.Pointer(s1))
	fmt.Printf("ptr:%v len:%v cap:%v \n", slice1.ptr, slice1.len, slice1.cap)
	slice2 := (*Slice)(unsafe.Pointer(s2))
	fmt.Printf("ptr:%v len:%v cap:%v \n", slice2.ptr, slice2.len, slice2.cap)
}

輸出結果:

s1 = [1 2 3 4 5 6 7 8 9]

s2 = [1 2 3 4 5 6 7 8 9 10]

s1 = [1 2 3 4 5 6 7 8 9]

s2 = [0 2 3 4 5 6 7 8 9 10]

ptr:0xc04207a000 len:9 cap:9

ptr:0xc04207c000 len:10 cap:18

由結果可知:append()后,s1和s2確實指向了不同的底層數組,并且二者的數組容量cap也不相同了。

過程是這樣的:當append()時,發現數組容量不夠用,于是開辟了新的數組空間,cap變為原來的兩倍,s2指向了這個新的數組,所以當修改s2時,s1不受影響

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • Golang 拷貝Array或Slice的操作
  • golang-切片slice的創建方式
  • Golang::slice和nil的對比分析
  • golang語言如何將interface轉為int, string,slice,struct等類型
  • Golang中的Slice與數組及區別詳解
  • golang中range在slice和map遍歷中的注意事項
  • golang slice元素去重操作

標簽:梅河口 雞西 汕頭 銅川 蘭州 欽州 吐魯番 重慶

巨人網絡通訊聲明:本文標題《golang中的空slice案例》,本文關鍵詞  golang,中的,空,slice,案例,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《golang中的空slice案例》相關的同類信息!
  • 本頁收集關于golang中的空slice案例的相關信息資訊供網民參考!
  • 推薦文章
    国产a网| 韩国毛片免费大片| 韩国三级香港三级日本三级la| 97视频免费在线观看| 欧美a级v片不卡在线观看| 亚州视频一区二区| 国产原创中文字幕| 国产伦久视频免费观看 视频| 国产a免费观看| 九九九国产| 一级片片| 欧美激情一区二区三区在线播放| 国产一区精品| 精品视频免费观看| 精品在线免费播放| 青青久久精品| 九九热精品免费观看| 九九干| 九九精品影院| 超级乱淫黄漫画免费| 四虎影视精品永久免费网站| 青青青草影院 | 免费的黄色小视频| 一级毛片视频在线观看| 99色视频在线观看| 国产成人精品在线| 免费国产在线观看| 欧美另类videosbestsex| 免费一级片在线观看| 国产伦精品一区三区视频| 黄视频网站免费看| 免费的黄色小视频| 国产高清在线精品一区二区| 中文字幕一区二区三区精彩视频| 久久成人性色生活片| 91麻豆国产| 国产成人啪精品视频免费软件| 久久精品成人一区二区三区| 香蕉视频久久| 欧美爱爱动态| 成人免费福利片在线观看| 精品在线免费播放| 久久成人亚洲| 九九精品久久| 欧美另类videosbestsex久久| 黄色短视屏| 美女被草网站| 国产一区二区精品在线观看| 日本免费看视频| 中文字幕一区二区三区精彩视频| 日韩欧美一二三区| 欧美a级成人淫片免费看| 久久精品成人一区二区三区| 日韩av成人| 精品视频一区二区| 日本免费看视频| 国产精品自拍亚洲| 在线观看成人网 | 欧美激情一区二区三区在线| 国产国语对白一级毛片| 尤物视频网站在线| 人人干人人插| 国产视频一区二区在线观看| 久久精品店| 四虎影视库| 99久久精品国产免费| 欧美一级视| 色综合久久天天综线观看| 欧美日本免费| 人人干人人草| 精品视频在线观看一区二区| 亚欧成人毛片一区二区三区四区| 国产视频一区在线| 午夜在线观看视频免费 成人| 日本在线不卡视频| 精品国产一区二区三区免费| 国产a免费观看| 九九久久99| 四虎影视久久| 成人免费福利片在线观看| 国产成人欧美一区二区三区的| 亚洲女初尝黑人巨高清在线观看| 日韩中文字幕一区二区不卡| 日本免费乱人伦在线观看 | 成人免费高清视频| 亚欧成人乱码一区二区| 久久精品成人一区二区三区| 天天色成人| 日本在线不卡视频| 国产高清视频免费| 国产不卡精品一区二区三区| 欧美爱爱动态| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 天天色色网| 精品视频在线观看一区二区三区| 欧美a级大片| 国产网站麻豆精品视频| 免费国产在线观看| 国产一区二区精品久久| 国产麻豆精品视频| 国产精品免费久久| 久久福利影视| 99久久精品费精品国产一区二区| 欧美1卡一卡二卡三新区| 午夜精品国产自在现线拍| 九九久久99| 精品国产一区二区三区精东影业| 久久国产精品只做精品| 精品国产一区二区三区久久久狼 | 午夜在线亚洲男人午在线| 97视频免费在线| 欧美另类videosbestsex| 国产美女在线观看| 国产极品精频在线观看| 欧美日本国产| 国产视频久久久久| 久草免费在线视频| 国产一区二区高清视频| 成人影院久久久久久影院| 日韩字幕在线| 免费一级片网站| 精品视频免费看| 亚洲 欧美 成人日韩| 99色精品| 免费一级片网站| 欧美激情在线精品video| 91麻豆tv| 成人免费福利片在线观看| 九九九在线视频| 青青青草影院| 国产伦精品一区二区三区在线观看| 欧美另类videosbestsex高清| 国产a视频| 二级片在线观看| 国产高清视频免费| 国产成人女人在线视频观看| 国产伦精品一区三区视频| 日韩在线观看视频黄| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 国产麻豆精品视频| 国产一区二区福利久久| 久久精品免视看国产明星| 精品久久久久久综合网| 欧美日本免费| 精品国产一区二区三区久久久蜜臀| 久久国产精品自线拍免费| 中文字幕Aⅴ资源网| 亚州视频一区二区| 成人免费观看网欧美片| 欧美爱色| 日韩中文字幕在线观看视频| 91麻豆国产| 青青久久精品| 亚洲精品影院久久久久久| 91麻豆国产| 日日爽天天| 精品国产亚洲人成在线| 可以在线看黄的网站| 精品视频免费看| 日韩在线观看视频黄| 夜夜操网| 四虎影视库国产精品一区| 国产一区二区福利久久| 九九精品久久久久久久久| 韩国毛片 免费| 沈樵在线观看福利| 久久国产精品只做精品| 天天做人人爱夜夜爽2020毛片| 国产精品自拍一区| 国产视频一区二区在线播放| 韩国毛片 免费| 欧美a免费| 国产极品精频在线观看| 天天做日日干| 99久久精品国产国产毛片| a级精品九九九大片免费看| 欧美激情一区二区三区在线| 欧美18性精品| 国产精品免费久久| 国产亚洲精品aaa大片| 久久久久久久网| 成人高清视频在线观看| 亚州视频一区二区| 久久精品大片| 久久久久久久久综合影视网| 国产伦久视频免费观看视频| 国产一区精品| 黄视频网站在线免费观看| 久久福利影视| 国产精品自拍在线观看| 日韩在线观看网站| 一级女性全黄生活片免费| 欧美另类videosbestsex久久| 国产视频一区在线| 欧美激情一区二区三区视频 | 国产视频网站在线观看| 999精品影视在线观看| 精品久久久久久影院免费| 久久精品店| 精品国产一区二区三区国产馆|