Go語言切片是對數組的抽象。數組
切片的結構:app
切片的聲明ide
s1 := make([]int, 5) s2 := make([]int, 5, 7)
切片的初始化:函數
nums := []int{1, 2, 3, 4, 5}
len()和cap()函數spa
一、 切片的長度是切片中元素的數量。指針
二、 切片的容量是從建立切片的索引開始的底層數組中元素的數量。code
三、 切片是可索引的,而且能夠由len()方法獲取長度,切片提供了計算容量的方 法cap(),能夠測量切片最長能夠達到多少。[數組計算cap()結果與len()相同]blog
四、 切片實際的是獲取數組的某一部分,len切片<=cap切片<=len數組 索引
package main import "fmt" func main() { s1 := make([]int, 5) s2 := make([]int, 5, 7) printSlice(s1) //length:5,cap=5,slice=[0 0 0 0 0] printSlice(s2) //length:5,cap=7,slice=[0 0 0 0 0] //建立切片 nums := []int{1, 2, 3, 4, 5} printSlice(nums) //從切片中截取小切片 nums1 := nums[1:4] printSlice(nums1) //length:3,cap=4,slice=[2 3 4] nums2 := nums[:3] printSlice(nums2) //length:3,cap=5,slice=[1 2 3] nums3 := nums[2:] printSlice(nums3) //length:3,cap=3,slice=[3 4 5] } func printSlice(slc []int) { fmt.Printf("length:%d,cap=%d,slice=%v \n", len(slc), cap(slc), slc) }
(五)、append( ) 和 copy( )函數 內存
一、函數append( ):
二、函數copy:*複製切片元素
package main import "fmt" func main() { //建立切片 nums := []int{1, 2, 3, 4, 5} printSlice("nums", nums) //slice=nums,p=0xc00000c5d0,length:5,cap=5,slice=[1 2 3 4 5] //append 追加元素 nums = append(nums, 10) printSlice("nums", nums) //slice=nums,p=0xc000014230,length:6,cap=10,slice=[1 2 3 4 5 10] a := []int{6, 7, 8, 9} //追加數組 nums = append(nums, a...) printSlice("nums", nums) //slice=nums,p=0xc000014230,length:10,cap=10,slice=[1 2 3 4 5 10 6 7 8 9] //刪除第一個元素 nums = nums[1:] printSlice("nums", nums) //slice=nums,p=0xc000014238,length:9,cap=9,slice=[2 3 4 5 10 6 7 8 9] //刪除最後一個元素 nums = nums[:len(nums)-1] printSlice("nums", nums) //slice=nums,p=0xc000014238,length:8,cap=9,slice=[2 3 4 5 10 6 7 8] //刪除中間的元素 b := int(len(nums) / 2) nums = append(nums[:b], nums[b+1:]...) printSlice("nums", nums) //slice=nums,p=0xc000014238,length:7,cap=9,slice=[2 3 4 5 6 7 8] //切片copy nums2 := make([]int, len(nums), cap(nums)*2) //copy 的切片沒有關聯 copy(nums2, nums) printSlice("nums2", nums2) //slice=nums,p=0xc000014238,length:7,cap=9,slice=[2 3 4 5 6 7 8] } func printSlice(name string, slc []int) { fmt.Printf("slice=%v,p=%p,length:%d,cap=%d,slice=%v \n", name, slc, len(slc), cap(slc), slc) }
三、使用make建立切片
package main import "fmt" import "strconv" func main() { str := make([]string, 0, 16) printSlice("str", str) for i := 0; i < 5; i++ { str = append(str, strconv.Itoa(i)) } printSlice("str", str) } func printSlice(name string, slc []string) { fmt.Printf("slice=%v,p=%p,length:%d,cap=%d,slice=%v \n", name, slc, len(slc), cap(slc), slc) }