go語言學習之路三 切片

2022-07-21 02:30:10 字數 1734 閱讀 6200

前面講了變數的有關知識,這裡對於其他的資料型別就不多作介紹,(和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"

s[1] = "b"

s[2] = "c"

fmt.println("apd:", s)

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位置的元素,不包含右邊...