package main
import
"fmt"
func
main()
s2 =
string
fmt.
println
(s1, s2)
//[1 2 3] [沙河 張江 平山村]
fmt.
println
(s1 ==
nil)
//輸出false s1和s2已經開闢記憶體空間
fmt.
println
(s2 ==
nil)
//輸出false
//長度和容量
fmt.
printf
("len(s1):%d cap(s1):%d\n"
,len
(s1)
,cap
(s1)
)//len(s1):3 cap(s1):3
fmt.
printf
("len(s2):%d cap(s2):%d\n"
,len
(s2)
,cap
(s2)
)//len(s2):3 cap(s2):3
// 由陣列得到切片
a1 :=
[...
]int
//定義陣列並初始化
s3 := a1[0:
4]//[1,3,5,7] 基於乙個陣列切割 這是切片 左包含右不包含 ,(左閉又開)
fmt.
println
(s3)
//[1 3 5 7]
s4 := a1[1:
6]//【3,5,7,9,11】
fmt.
println
(s4)
//[3 5 7 9 11]
s5 := a1[:4
]//=>[0:4] [1 3 5 7]
s6 := a1[3:
]//[7 9 11 13] //=>[3:len(a1)]
s7 := a1[:]
//=>[0:len(a1)]
fmt.
println
(s5)
//[1 3 5 7]
fmt.
println
(s6)
//[7 9 11 13]
fmt.
println
(s7)
//[1 3 5 7 9 11 13]
fmt.
println
(s5, s6, s7)
//[1 3 5 7] [7 9 11 13] [1 3 5 7 9 11 13]
//切片的容量是指底層陣列的容量
fmt.
printf
("len(s5):%d cap(s5):%d\n"
,len
(s5)
,cap
(s5)
)//輸出 4 7
//底層陣列從切片的第乙個元素到最後的元素數量s
fmt.
printf
("len(s6):%d cap(s6):%d\n"
,len
(s6)
,cap
(s6)
)//len(s6):4 cap(s6):4
//切片指向了乙個底層陣列
//切片的長度是他的元素個數
//切片的容量是底層陣列中從切片切的第乙個元素到最後乙個元素的數量
//切片支援擴容
//切片在切片
s8 := s6[3:
]//[13]
fmt.
printf
("len(s8):%d cap(s8):%d\n"
,len
(s8)
,cap
(s8)
)//len(s8):1 cap(s8):1
//切片的容量是底層陣列中從切片切的第乙個元素到最後乙個元素的數量
//切片是引用型別,都指向了底層陣列
fmt.
println
("s6:"
, s6)
//s6: [7 9 11 13]
a1[6]
=1300
///修改了底層陣列
fmt.
println
("s6:"
, s6)
//s6: [7 9 11 1300]
fmt.
println
("s8:"
, s8)
//s8: [1300]
}
Go語言切片
go語言切片 go語言切片是對陣列的抽象 go 陣列的長度不可改變,在特定場景中這樣的集合就不太適用,go中提供了一種靈活,功能強悍的內建型別切片 動態陣列 與陣列相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大。宣告乙個未指定大小的陣列來定義切片 var identifier ...
go語言 切片
一 概述 low 陣列下標的起點 high 陣列下標的結束點 不包括此點 arr low arr high len 長度 high low cap 容量 max low 二 切片的長度與容量 package main import fmt func main slice arr 0 3 5 fmt....
Go語言 切片
因為陣列的長度是固定的並且陣列長度屬於型別的一部分,所以陣列有很多的侷限性。例如 func arraysum x 3 int int return sum 這個求和函式只能接受 3 int型別,其他的都不支援。再比如,a 3 int陣列a中已經有三個元素了,我們不能再繼續往陣列a中新增新元素了。切片...