golang切片和陣列的區別

塗塗毅兒發表於2019-07-06

好久的沒有寫部落格了,這段時間沒事研究了下go這門語言。

我們先介紹下go中的陣列和切片的區別和用法

說了這麼多 我們先來看段程式碼吧

var arr1 [3]int
var arr2 [3]int = [3]int{1, 2, 3}
fmt.Println(arr1)
fmt.Println(arr2)

 我申明瞭兩個陣列,初始化和沒初始化的

 然後執行這段程式碼輸出為[0 0 0] [1 2 3] 有沒有發現和其他語言不一樣的地方,細心的朋友應該已經發現了 在go語言裡預設為0值

D:/program/GoLang/hello golang/src/b/b.exe  [D:/program/GoLang/hello golang/src/b]
[0 0 0]
[1 2 3]
成功: 程式退出程式碼 0.

  

然後我們再來看看切片,切片和陣列很像。可以說是一種特殊陣列

var slice []int = []int{3, 6}
fmt.Println(slice)
slice = append(slice, 1, 2, 3, 5, 8)
fmt.Println(slice)

這裡宣告瞭一個slice int型別的陣列切片 切片的長度是可變的,我們可以通過append方法向裡面新增同型別的值

執行程式碼控制檯 列印的和我們預想的完全一樣

D:/program/GoLang/hello golang/src/b/b.exe  [D:/program/GoLang/hello golang/src/b]
[3 6]
[3 6 1 2 3 5 8]
成功: 程式退出程式碼 0.

 上面我們講述了切片和陣列的用法,現在來看看他們的區別

fmt.Println("陣列***********************************")
var arr1 [3]int = [3]int{1, 2, 3}
var arr2 [3]int = arr1
fmt.Println(arr1, arr2)
arr2[0] = 10002
fmt.Println(arr1, arr2)

fmt.Println("切片***********************************")
var slice1 []int = []int{1, 2, 3}
var slice2 []int = slice1
fmt.Println(slice1, slice2)
slice2[0] = 10002
fmt.Println(slice1, slice2)

輸出結果如下 可以看出陣列是值拷貝而切片是引用

D:/program/GoLang/hello golang/src/b/b.exe  [D:/program/GoLang/hello golang/src/b]
陣列***********************************
[1 2 3] [1 2 3]
[1 2 3] [10002 2 3]
切片***********************************
[1 2 3] [1 2 3]
[10002 2 3] [10002 2 3]
成功: 程式退出程式碼 0.

  好了今天就寫怎麼多,喜歡的朋友幫忙點個贊

相關文章