Go語言中切片slice的宣告與使用

2021-10-09 22:34:38 字數 3777 閱讀 7727

go語言中的切片,是一種動態陣列,它是對陣列的擴充套件。

2.1.1 宣告⼀個未指定⻓度的陣列來定義切⽚

2.1.2 使⽤make()函式來建立切⽚:

package main

import

("fmt"

)func

main()

效果如下:

圖(1) 列印切片的長度、容量和資料元素

s := int
陣列: arr := [5]int
可以通過設定下限及上限來設定擷取切⽚ [lower-bound:upper-bound] 即前閉後開: [lower-bound, upper-bound)

package main

import

("fmt"

)func

printslice

(x [

]int

)func

main()

printslice

(numbers)

//列印原始切片

fmt.

println

("numbers== "

, numbers)

//列印子切片,從索引1到索引4,左閉右開,[1,4)

fmt.

println

("numbers[1:4]== "

, numbers[1:

4])//預設下限為0,[0,3)

fmt.

println

("numbers[:3]== "

, numbers[:3

])//預設上限為len(s),[4,len(s))

fmt.

println

("numbers[4:]== "

, numbers[4:

])//列印子切片,[0,2)

number2 := numbers[:2

]printslice

(number2)

//列印子切片,[2,5)

number3 := numbers[2:

5]printslice

(number3)

}

效果如下:

圖(2) 通過擷取方法,來獲取切片

// myslicecap project main.go

package main

import

("fmt"

)func

main()

func

slicecap()

fmt.

println

("cap(arry)= "

,cap

(arry)

, arry)

//擷取陣列,形成切片

sli01 := arry[2:

8]fmt.

printf

("%t\n"

, sli01)

fmt.

println

("cap(sli01)= "

,cap

(sli01)

, sli01)

sli02 := arry[4:

7]fmt.

println

("cap(sli02)= "

,cap

(sli02)

, sli02)

//擷取切片,形成切片

sli03 := sli01[3:

9]fmt.

println

("擷取sli01[3:9]後形成sli03: "

, sli03)

sli04 := sli02[4:

7]fmt.

println

("擷取sli02[4:7]後形成sli04: "

, sli04)

//切片是引用型別

sli04[0]

="x"

fmt.

print

(arry, sli01, sli02, sli03, sli04)

}

執行結果如下:

圖(3) 切片裡的cap()函式

修改陣列的案例,如下:

// myslicecmp project main.go

package main

import

("fmt"

)func

main()

b :=

int fmt.

printf(,

&a, a, a,

len(a)

) fmt.

printf(,

&b, b, b,

len(b)

) c := a

d := b

fmt.

printf(,

&c, c, c,

len(c)

) fmt.

printf(,

&d, d, d,

len(d)

) a[1]

=200

fmt.

println

("a= "

, a,

" c= "

, c)

d[0]=

100 fmt.

println

("b= "

, b,

" d= "

, d)

}

執行結果如下:

圖(4)修改陣列裡的值

// myslicechg project main.go

package main

import

("fmt"

)func

main()

//根據陣列擷取切片

nums1 := arry[:]

nums2 := arry[:]

fmt.

println

("arry= "

, arry)

nums1[0]

=100

fmt.

println

("arry= "

, arry)

nums2[1]

=200

fmt.

println

("arry= "

, arry)

fmt.

printf(,

&arry)

fmt.

printf(,

&nums1)

fmt.

printf(,

&nums2)

}

執行結果如下:

圖(5) 修改切片裡的值

Go語言中Slice(切片)初探

最近上課學習go語言,看go語言指南,裡面說 乙個 slice 會指向乙個序列的值,並且包含了長度資訊,為了指定容量,可傳遞第三個引數到 make。感覺有些懵比,指向乙個序列的值?指定容量?我就在go指南上互動的地方做了點嘗試。本人蒟蒻,如有錯誤,希望大佬指出的時候不要激動。乙個slice 切片 是...

Go語言切片 Slice

python裡面切片是一種操作,用於取list裡面元素。而go語言的切片則是一種資料型別,而不是一種操作。go語言中提供了切片 slice 作為一種更為靈活 功能強悍的內建型別,它其實是陣列的一種抽象。切片的原始碼 type slice struct slice是原陣列在記憶體中的位址的乙個指標,它...

golang中切片 slice 的坑

golang中陣列的長度是不可以變得,但是某些場合就不使用了,go提供了一種靈活,功能強悍的型別 切片,切片中有兩種概念 一種是len長度,二是cap容量,長度是已經被賦值的最大下標 1,可以通過len函式獲得切片的長度。容量是指切片最大可容納多少個元素,可以通過cap函式獲得,切片是引用型別,因此...