2018年7月7日 星期六

Golang Features


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。

[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,channel

len

append

cap

new

new struce,new array
new得到的是pointer

沒有留言:

張貼留言