go學習十四 切片

2021-09-24 23:31:39 字數 2585 閱讀 1306

go 語言切片是對陣列的抽象。

go 陣列的長度不可改變,在特定場景中這樣的集合就不太適用,go中提供了一種靈活,功能強悍的內建型別切片("動態陣列"),與陣列相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大。

使用 go run slice.go 執行該檔案即可

package main

import "fmt"

func main()

//定義切片

/*你可以宣告乙個未指定大小的陣列來定義切片:切片不需要說明陣列長度。

var identifier type

或使用make()函式來建立切片:

var slice1 type = make(type, length)

也可以簡寫為

slice1 := make(type, length)

也可以指定容量,其中capacity為可選引數。

make(type, length, capacity)

這裡 length 是陣列的長度並且也是切片的初始長度。

*/func initslice()

// 初始化值依次是1,2,3.其capacity=length=3

s := int

fmt.printf("s 的值是%v\n", s)

//初始化切片s1 ,引用陣列arr

var arr = [...]int

s1 := arr[:]

fmt.printf("s1 的值是%v\n", s1)

//通過內建函式make()初始化切片s5, make(type, length, capacity)

s5 := make(int,4,5)

fmt.printf("s5 的值是%v\n", s5)

}//len() 和 cap() 函式

//切片是可索引的,並且可以由 len() 方法獲取長度。

//切片提供了計算容量的方法 cap() 可以測量切片最長可以達到多少。

func getslicelencap(slice int) (int,int)

//切片擷取

//可以通過設定下限及上限來設定擷取切片 [lower-bound:upper-bound],

func sliceintercept()

fmt.printf("arr 的值是%v\n", arr)

//s := arr[startindex:endindex] -------------------------------------------

//將arr中從下標startindex到endindex-1 下的元素建立為乙個新的切片

s2 := arr[0:1]

fmt.printf("s2 的值是%v\n", s2)

//預設endindex時將表示一直到arr的最後乙個元素

s3 := arr[2:]

fmt.printf("s3 的值是%v\n", s3)

//預設startindex時將表示從arr的第乙個元素開始

s4 := arr[:3]

fmt.printf("s4 的值是%v\n", s4)

}//切片插入和複製

/*如果想增加切片的容量,我們必須建立乙個新的更大的切片並把原分片的內容都拷貝過來。

*/ var slice1 int

var len1,cap1 int

var slice2 int

var len2,cap2 int

len1,cap1 = getslicelencap(slice1)

fmt.printf("slice1的值是%v 的長度是%v 容量是%v\n",slice1, len1,cap1)

//插入空切片

len1,cap1 = getslicelencap(slice1)

fmt.printf("slice1的值是%v 的長度是%v 容量是%v\n",slice1, len1,cap1)

//插入乙個元素

len1,cap1 = getslicelencap(slice1)

fmt.printf("slice1的值是%v 的長度是%v 容量是%v\n",slice1, len1,cap1)

//插入多個元素

len1,cap1 = getslicelencap(slice1)

fmt.printf("slice1的值是%v 的長度是%v 容量是%v\n",slice1, len1,cap1)

//建立乙個兩倍容量的切片

slice2 = make(int,len(slice1),(cap(slice1)*2))

len2,cap2 = getslicelencap(slice2)

fmt.printf("slice2的值是%v 的長度是%v 容量是%v\n",slice2, len2,cap2)

//複製 slice1 到 slice2

copy(slice2,slice1)

len2,cap2 = getslicelencap(slice2)

fmt.printf("slice2的值是%v 的長度是%v 容量是%v\n",slice2, len2,cap2)

}

github: 

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學習 鎖機制

執行緒同步時,可能會有多個執行緒需要使用這個資源,為了避免資源競爭,我們需要鎖機制。1.import sync 2.互斥鎖,var mu sync.mutex 2.讀寫所,var mu sync.rwmutex package main import fmt math rand sync sync ...

Go語言學習十一 go語言切片

go 語言切片是對陣列的抽象。go 陣列的長度不可改變,在特定場景中這樣的集合就不太適用,go中提供了一種靈活,功能強悍的內建型別切片 動態陣列 與陣列相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大。你可以宣告乙個未指定大小的陣列來定義切片 var identifier typ...