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函式獲得,切片是引用型別,因此...