前面講了變數的有關知識,這裡對於其他的資料型別就不多作介紹,(和c差不多),因此重點來討論下切片。
一、切片是引用型別,這裡要稍微介紹兩個概念:值型別,構造型別和引用型別
1、值型別:是一種由型別的實際值表示的資料型別。如果向乙個變數分配值型別,則該變數被附以全新的值的副本,go語言的值型別包括布林型,整型,浮點型,複數型。
2、構造型別:和c中差不多,包括陣列,結構體和字串
3、引用型別:由型別的實際值引用表示的資料型別。如果為某個變數分配乙個引用型別,則該變數將應用原始值,不建立任何副本。go語言引用型別包括切片、字典和通道。
切片通常用來實現變長陣列,原型定義如下:
struct slice
;它抽象為以下三個部分:
指向被引用的底層陣列的指標;切片中元素的個數;切片分配的儲存空間。
二、切片的建立和宣告
1、基於底層陣列建立切片
var array1=[10]int
var sliceint
slice1=array1[:5]
slice2=array1[5:]
slice3=array1[:]
slice4=array1
slice5=array1[0:len(array1)]
自己新增package和import和func main將上面的**執行下看看效果,理解基於底層陣列建立切片。
2、直接建立切片
var slice = int
3、使用make函式建立切片
var slice=make(int,5)//建立乙個有5個元素的整型切片slice,元素的初始值為0。
在使用make()函式建立切片時,還可以為切片元素預留儲存空間:
var slice=make(int,5,10)//建立乙個有5個元素的整型切片slice,元素的初始值為0,並且預留10個元素的儲存空間。
三、切片元素的訪問和遍歷
切片的訪問和陣列元素的訪問一樣,通過元素下表訪問,或者使用range遍歷所有切片元素.例:
var slice=int
for i:=0;i<=4;i++
for i,v:=range slice
四、切片的操作
1、切片元素的增加
s := make(string, 3)fmt.println("emp:", s)
s[0] = "a"fmt.println("apd:", s)s[1] = "b"
s[2] = "c"
2、切片的複製:
var slice1=int
var slice2=make(int,3,5)
var n int
n=copy(slice2,slice1)
fmt.println(n,slice2,len(slice2),cap(slice2))
slice3:=slice[3:6]
n=copy(slice3,slice1[1:5])
fmt.println(n,slice,slice3)
這段**需要讀者好好研究研究,這可以加深對slice引用的是底層陣列的理解,執行的結果是:
3 [1 2 3] 3 5
3[1 2 3 2 3 4 7 8 9 10] [2 3 4]
見下圖:
GO語言學習 切片
切片的長度可以用len獲得,容量由cap獲得.s1 make int,5 len s1 可以得到長度為5,cap s1 可以得到容量為5 s2 make int,5,8 len s2 可以得到長度為5,cap s2 可以得到容量為8 在s1中我沒有用make說明此切片的容量,因此他的容量和長度相等都...
Go語言學習十一 go語言切片
go 語言切片是對陣列的抽象。go 陣列的長度不可改變,在特定場景中這樣的集合就不太適用,go中提供了一種靈活,功能強悍的內建型別切片 動態陣列 與陣列相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大。你可以宣告乙個未指定大小的陣列來定義切片 var identifier typ...
go語言學習筆記 切片
理解 建立切片 1.make函式,語法 make 型別,長度,容量 s make int,3,5 切片s可以訪問3個元素,底層陣列擁有5個元素 注意 不允許建立長度小於容量的切片 2.建立乙個陣列的切片 arr string slice arr 1 3 hi go 從索引1到3位置的元素,不包含右邊...