Collection
array
長度固定,元素相同。實際上可以用interface當類型,所以可放不同類型元素。
array進行slice操作後,產生的是slice,非array。
declare array:
var grid [5][5]int var buffer [20]byte
create array:
[3]string [3]string{"a","b","c"} [...]string{"a","b","c"} grid[1][0],grid[1][1],grid[1][2]=8,6,3 grid2:=[3][3]int{{1,2,3},{1,2,3}} cities:=[...]string{"a","b","c"}
slice
長度可變,元素相同。slice底層是建立array,並引用它。 實際上可以用interface當類型,所以可放不同類型元素。
官方function都是使用slice。
同一個slice出來的slice,因為是引用相同array,
所以其中一個改變,會影響所有對該array的引用。
declare slice:
var grid [][]int
create slice:
不聲明數量,就是slice;聲明數量就是array。
不聲明數量,就是slice;聲明數量就是array。
[3]string make([]Type,length,capacity) make([]Type,length) []int{} []string{"a","b","c"} s:=new([7]string)[:] //new array然後slice全部,所以s是slice s:=[]string{"a","b","c","d","e"} t:=s[:5] u:=s[3:len(s)-1] u[1]="x" //改變原本的array引用,所以影響所有slice
slice操作:
//尾部都不包括 s[n] //slice n s[n:m] //slice n to m-1 s[n:] //slice n to last s[:m] //slice 0 to m-1 s[:] //slice all
內建函數
make
used to create slice,map,channellen
append
cap
new
new struce,new arraynew得到的是pointer
沒有留言:
張貼留言