GO語言中創(chuàng)建切片的三種實現(xiàn)方式
GO中三種方式創(chuàng)建切片
第一種方式
var 切片名 []數(shù)據(jù)類型
var s1[]string fmt.Println(s1) fmt.Println(len(s1))
第二種方式
切片名 := []類型{}
s2 := []int{} fmt.Println(s2) fmt.Println(len(s2))
第三種方式
使用make()函數(shù)創(chuàng)建:make(切片類型,長度,容量)
s3 := make([]int, 3, 5) fmt.Println(s3) fmt.Println(len(s3)) fmt.Println(cap(s3))
使用make()函數(shù)創(chuàng)建注意事項:
1.make(切片類型,長度,容量)
2.長度是已經(jīng)初始化的空間。容量是已經(jīng)開辟的空間,包括已經(jīng)初始化的空間和空閑的空間
3.切片長度要小于容量
4.len()返回長度,cap()返回容量
5.函數(shù)中的容量參數(shù)是可以省略的,這是容量與長度相等
s4 := make([]int, 6) fmt.Println(s4) fmt.Println(len(s4)) fmt.Println(cap(s4))
go語言—切片的定義
- 因為數(shù)組長度是固定的所以有很多局限性
- 切片是一個擁有相同元素的可變長序列,是基于數(shù)組類型做的一層封裝
- 切片非常靈活,支持自動擴容
- 切片是引用類型,內(nèi)部結(jié)構(gòu)包含地址、長度、容量。所以不需要使用額外的內(nèi)存
1、切片的定義
var a []string // 定義一個空切片,[]中不帶任何內(nèi)容就是切片 var b = []int{} //聲明一個整數(shù)切片并初始化 var c = []bool{"false","true"} //聲明一個布爾切片并初始化 // 切片是引用類型,不支持直接比較,只能和nil比較 fmt.Println(a == nil) //true fmt.Println(b == nil) //false fmt.Println(c == nil) //false
2、切片表達式
切片底層就是一個數(shù)組,所以可以基于數(shù)組通過索引得到切片
a := [5]int{1,2,3,4,5} b := a[1:3] // b := a[:] 等同于a數(shù)組所有值 fmt.Printf("類型:%T\n值:%s",b,b) 輸出: 類型:[]int //int類型切片 值:[2 3]
3、切片的取值和改值
- 切片也通過索引取值和改值
- 切片修改值時,底層數(shù)組的值也會改變,與切片保持一致
- 同理,底層數(shù)組變化也會影響到切片變化
a := [6]int{1,2,3,4,5,6} b := a[:] //b為數(shù)組a的切片 b[2] = 30 //修改切片b索引為3的值 fmt.Printf("a的類型:%T\na的值:%v",a,a) fmt.Printf("b的類型:%T\nb的值:%v",b,b) 輸出: a的類型:[6]int a的值:[1 2 30 4 5 6] //修改切片b,a中值同樣被修改 b的類型:[]int b的值:[1 2 30 4 5 6]
4、切片的長度和容量
切片有自己的長度和容量,可以通過len()函數(shù)求長度,cap()函數(shù)求切片容量
a := [5]int{1,2,3,4,5} // 切片長度:指切片當前有多長,即存了多少值 var s []int = a[0:2] fmt.Println(s) // [1,2,3] fmt.Println(len(s)) // 3 // 切片容量:指這個切片最多能存多少值,基于底層數(shù)組來的 // 但是切片容量并不一定等于數(shù)組長度,容量大小取決于切片是從哪個地方開始切數(shù)組的,從切數(shù)組位置開始往后計算 var s1 []int = a[0:3] //從索引為0的位置向后切 fmt.Println(cap(s1)) // 容量為5 var s2 []int = a[2:] //從索引為2的位置向后切 fmt.Println(cap(s2)) //容量為3
5、使用make()函數(shù)創(chuàng)建切片
make()函數(shù)可以不基于數(shù)組而動態(tài)的創(chuàng)建切片
make([]T, size, cap)
- T:切片的元素類型
- size:切片中元素的數(shù)量
- cap:切片的容量,cap可以省略,省略時默認等于size
a := make([]int,3,10) // 創(chuàng)建一個長度為3,容量為10的整數(shù)型切片,默認0值 fmt.Println(a) // [0,0,0] fmt.Println(len(a)) // 3 a的內(nèi)部存儲空間分配了10個,但實際只用了3個 fmt.Println(cap(a)) // 10
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
golang使用map支持高并發(fā)的方法(1000萬次操作14ms)
這篇文章主要介紹了golang使用map支持高并發(fā)的方法(1000萬次操作14ms),本文給大家詳細講解,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-11-11go-micro微服務(wù)domain層開發(fā)示例詳解
這篇文章主要為大家介紹了go-micro微服務(wù)domain層開發(fā)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01Go?函數(shù)中獲取調(diào)用者的函數(shù)名和文件名及行號
這篇文章主要介紹了Go?函數(shù)中獲取調(diào)用者的函數(shù)名和文件名及行號,文章圍主題詳細內(nèi)容展開相關(guān)介紹,感興趣的小伙伴可以參考一下2022-05-05Hugo?Config模塊構(gòu)建實現(xiàn)源碼剖析
這篇文章主要為大家介紹了Hugo?Config模塊構(gòu)建實現(xiàn)源碼剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02GoLang string與strings.Builder使用對比詳解
這篇文章主要介紹了GoLang string與strings.Builder使用對比,Builder 用于使用 Write 方法有效地構(gòu)建字符串。它最大限度地減少了內(nèi)存復(fù)制。零值可以使用了。不要復(fù)制非零生成器2023-03-03