go語言的數組和切片區別


這里不介紹數組和切片的使用技巧,主要看下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)

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM