十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
//切片slice 練習(xí)
package main
import "fmt"
func main() {
//============先創(chuàng)建一個(gè)數(shù)組====
// 創(chuàng)建數(shù)組,必須指明個(gè)數(shù)
age := [4]int{}
fmt.Println(age)
//=========聲明一個(gè)切片Slice類型=====
// 看見(jiàn)了吧,切片類型,是不需要指明 個(gè)數(shù)的
// 記住,slice類型的底層,也是數(shù)組
var s1 []float64
fmt.Println(s1)
//========方式一:利用已有的數(shù)組,來(lái)初始化s1
sparkNodeCpu := [...]float64{4.5, 3.4, 2.3, 9.8, 10}
s1 = sparkNodeCpu[3:5] //從下標(biāo)為3的元素,開(kāi)始獲取
fmt.Println("------------->\t", s1)
s1 = sparkNodeCpu[1:] //從下標(biāo)為1的元素,獲取到 最后
fmt.Println(s1)
s1 = sparkNodeCpu[:4] //指定最后一個(gè)獲取的元素
fmt.Println(s1)
//========方式二:利用make關(guān)鍵字,來(lái)創(chuàng)建切片
//make([]T, len, cap)
//[]T,表示切片的類型
//len,表示當(dāng)前元素的個(gè)數(shù),或者,初始化的個(gè)數(shù)
//cap,由于切片的底層其實(shí)是數(shù)組,而數(shù)組在內(nèi)存里是一塊連續(xù)的空間,
// 如make([]int, 3,10) 為了提升效率,一般先在內(nèi)存里創(chuàng)建
// 一塊連續(xù)的內(nèi)存大小,為10,如果你的元素個(gè)數(shù)超過(guò)了10的話,
//Go語(yǔ)言,會(huì)默認(rèn)將你現(xiàn)在的內(nèi)存空間,由10,增加到20,重新在內(nèi)存里找一塊連續(xù)的空間,分配20個(gè)空間
// 如果又超過(guò)20的話,就分配40,就這么下去。因此,最好你知道你需要多大的內(nèi)存空間
s2 := make([]int, 3, 10)
fmt.Println(len(s2), cap(s2)) // 3 10
s2a := make([]int, 3) // 也可以不指定cap,這樣的話,cap的默認(rèn)值,就是len的長(zhǎng)度
fmt.Println(len(s2a), cap(s2a)) // 3 3
//=======================Reslice========練習(xí)=====
// 先聲明一個(gè)切片類型
a := []rune{'a', 'b', 'c', 'd', 'e', 'f', 'j', 'k', 'u'}
//以原切片a為基礎(chǔ),開(kāi)始切
//此時(shí),你要注意了,新產(chǎn)生的切片s3的容量
//下面的操作就是Reslice
s3 := a[2:5] //表示,從下標(biāo)為2開(kāi)始,到5結(jié)束,大不能超過(guò)被切slice的cap容量7
s3a := s3[3:5]
fmt.Println("長(zhǎng)度:\t", len(s3), "\t容量cap:\t", cap(s3)) //3 7
fmt.Println("長(zhǎng)度:\t", len(s3a), "\t容量cap:\t", cap(s3a)) //2 4
fmt.Println(string(s3a))
//=======================Append========練習(xí)=====
slice1 := make([]int, 3, 6) //默認(rèn)值是全是0
fmt.Printf("先打印出slice1的內(nèi)存地址:\t %p\n", slice1) // 0xc042078090
//先追加3個(gè)元素
slice1 = append(slice1, 1, 3, 5)
//再打印出slice1的值,和 內(nèi)存地址
fmt.Printf("%v %p\n", slice1, slice1) //[0 0 0 1 3 5] 0xc042078090
//繼續(xù)追加元素,查看,內(nèi)存地址,是否發(fā)生了變化
slice1 = append(slice1, 4, 5, 6)
// 超過(guò)了slice1的容量后,重新分配了內(nèi)存地址
fmt.Printf("%v %p\n", slice1, slice1) //[0 0 0 1 3 5 4 5 6] 0xc042056060
fmt.Println("=======================================")
//測(cè)試,當(dāng)多個(gè)切片都指向同一個(gè)底層數(shù)組時(shí),并且多個(gè)切片有共同的元素時(shí),如果其中一個(gè)元素,發(fā)生變化的話,
//其他切片也會(huì)發(fā)生變化的
appleSlice := []int{3, 4, 5, 9, 8, 7}
bananaS := appleSlice[3:6]
orangeS := appleSlice[2:5]
//bananaS orangeS 有兩個(gè)共同的元素
fmt.Println(appleSlice) //[3 4 5 9 8 7]
fmt.Println(bananaS) //[9 8 7]
fmt.Println(orangeS) //[5 9 8]
fmt.Println("=======================================")
//假設(shè)bananaS切片里的元素,第1個(gè)元素,發(fā)生了變化的話,
//測(cè)試,appleSlice,orangeS 是否也發(fā)生了變呢
//我改動(dòng)的是下標(biāo)為1,值為8的元素,將8改為了110,與此同時(shí),其他切片中,8的值也全都改成了110了
bananaS[1] = 110 //將下標(biāo)為1的元素,設(shè)置為110
fmt.Println(appleSlice) //[3 4 5 9 110 7]
fmt.Println(bananaS) //[9 110 7]
fmt.Println(orangeS) //[5 9 110]
fmt.Println("=======================================")
// 注意,此時(shí),orangeS,orangeS 依舊都執(zhí)行底層的數(shù)組appleSlice
//還要注意下面的情形
//利用Append方法
bananaS = append(
bananaS, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7)
//此時(shí),bananaS已經(jīng)不再指向appleSlice了,因?yàn)槌^(guò)了appleSlice的容量
//而是,指向了新的地址,此時(shí),我們?cè)傩薷腷ananaS
bananaS[1] = 1110
fmt.Println(appleSlice) //[3 4 5 9 110 7]
//看見(jiàn)了把,僅僅是修改了自己的值,appleSlice,orangeS 并沒(méi)有發(fā)生變化
fmt.Println(bananaS) //[9 1110 7 7 7 7 7 7 7 7 7 7 7 7 7 7]
fmt.Println(orangeS) //[5 9 110]
fmt.Println("=======================================")
//=======================Copy========練習(xí)=====
// copy(A,B) 是說(shuō),將B里的元素,拷貝到A里
ftpNum := []int{4, 6, 7, 2, 3, 8, 9}
sftpNum := []int{1, 2, 3}
//將sftp
copy(ftpNum, sftpNum) //注意,copy之后,就會(huì)將原先的值該了
fmt.Println(ftpNum)
fmt.Println(sftpNum)
//截取拷貝
copy(sftpNum[1:2], ftpNum[2:3])
fmt.Println(ftpNum)
fmt.Println(sftpNum)
}創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開(kāi)啟,新人活動(dòng)云服務(wù)器買多久送多久。