這里不介紹數組和切片的使用技巧,主要看下2者的區別。
首先看下它們的定義:
- 數組:類型
[n]T表示擁有n個T類型的值的數組。 - 切片:類型
[]T表示一個元素類型為T的切片。
看一個數組的例子:
var x[3]int = [3]int{1,2,3}
var y[3]int = x
fmt.Println(x,y)
y[0]=999
fmt.Println(x,y)
輸出結果如下,可以發現y的內容變了,但是X沒有變
[1 2 3] [1 2 3]
[1 2 3] [999 2 3]
對上述代碼稍加變動,看一個切片的例子:
var x[]int = []int{1,2,3}
var y[]int = x
fmt.Println(x,y)
y[0]=999
fmt.Println(x,y)
輸出結果如下,可見x和y的內容都變了
[1 2 3] [1 2 3] [999 2 3] [999 2 3]
另有如下初始化、賦值方式都是語法錯誤的
var x[3]int = []int{1,2,3}
-----------------------------
var x[]int = [3]int{1,2,3}
-----------------------------
var x[]int = []int{1,2,3}
var y[3]int = x
-----------------------------
var x[3]int = [3]int{1,2,3}
var y[]int = x
可以得出結論:如官方文檔所述,數組是需要指定個數的,而切片則不需要。數組賦值也可是使用如下方式,忽略元素個數,使用“...”代替
x:= [...]int{1,2,3}
y := x
fmt.Println(x,y)
y[0]=999
fmt.Println(x,y)
