初識
slice(切片)代表變長的序列,序列中每個元素都有相同的型別。乙個slice型別一般寫作t,其中t代表slice中元素的型別;slice的語法和陣列很像,只是沒有固定長度而已,slice在底層引用了乙個陣列物件。
slice的長度對應slice中元素的數目;
長度不能超過容量,容量一般是從slice的開始位置到底層資料的結尾位置。內建的len和cap函式分別返回slice的長度和容量。
slice的切片操作s[i:j],其中0 ≤ i≤ j≤ cap(s),用於建立乙個新的slice,引用s的從第i個元素開始到第j-1個元素的子串行。
切片操作超出cap(s)的上限將導致乙個panic異常,但是超出len(s)則是意味著擴充套件了slice
我們先定義乙個底層陣列:
months :=
[...
]string
讓我們分別定義表示第二季度和北方夏天月份的slice,它們有重疊部分:
我們可以看到,切片操作s[i:j]返回新的slice,它的長度len是j-i,它的容量cap是底層陣列的長度減去開始擷取的元素所在的索引 i
兩個slice之間不能做比較,slice唯一合法的操作是和nil做比較,例如:
if summer ==
nil
如果你需要測試乙個slice是否是空的,使用len(s) ==0 來判斷,而不是 s == nil來判斷。
下面的例子,展示了slice底層公用乙個陣列
func
main()
func
main()
s =(s, s2...
)// [1 2 3 4 5 6 7]
}
var cityslice [
]string
// 追加乙個元素
cityslice =
(cityslice,
"北京"
)// 追加多個元素
cityslice =
(cityslice,
"上海"
,"廣州"
,"深圳"
)// 追加切片
a :=
string
cityslice =
(cityslice, a...
)fmt.
println
(cityslice)
//[北京 上海 廣州 深圳 成都 重慶]
go語言內建的copy()函式可以迅速地將乙個切片的資料複製到另外乙個切片空間中,copy()函式的使用格式如下:
copy
(destslice, srcslice [
]t)
示例:
func
main()
c :=
make([
]int,5
,5)copy
(c, a)
//使用copy()函式將切片a中的元素複製到切片c
fmt.
println
(a)//[1 2 3 4 5]
fmt.
println
(c)//[1 2 3 4 5]
c[0]=
1000
fmt.
println
(a)//[1 2 3 4 5]
fmt.
println
(c)//[1000 2 3 4 5]
}
go語言沒有提供刪除元素的函式,我們根據slice本身特性來刪除
func
main()
// 要刪除索引為2的元素
a =(a[:2]
, a[3:
]...
) fmt.
println
(a)//[30 31 33 34 35 36 37]
}
go語言資料型別之數值型別
整型 整型分為以下兩個大類 按長度分為 int8 int16 int32 int64 對應的無符號整型 uint8 uint16 uint32 uint64 其中,uint8就是我們熟知的byte型 var a int 10 fmt.printf d n a 浮點型 go語言支援兩種浮點型數 flo...
go語言資料型別之指標
初識 任何程式資料載入記憶體後,在記憶體都有他們的位址,這就是指標。而為了儲存乙個資料在記憶體中的位址,我們就需要指標變數。go語言中的指標不能進行偏移和運算,因此go語言中的指標操作非常簡單,我們只需要記住兩個符號 取位址 和 根據位址取值 go語言中的值型別 int float bool str...
Go語言資料型別
go語言任何乙個變數都有乙個型別。go語言的資料型別分為基礎型別 引用型別 結構型別 基礎型別 數值型別 字元型別 字串型別 布林型別 陣列型別 引用型別 切片 map channel inte cce型別 結構型別 結構體go語言整型分為有符號 無符號型別兩大型別 有符號整數型別 既可以支援正數也...