陣列切片就像乙個指向陣列的指標,它擁有自己的資料結構,不僅僅是指標,陣列切片的資料結構可以抽象為以下三個變數:
乙個指向原生陣列的指標
陣列切片的元素個數
陣列切片已分配的儲存空間
從底層實現來看,陣列切片實際上還是通過使用陣列來管理元素,這個有點像c++中陣列與vector的關係,並且可以被隨意傳遞而不會導致所管理的元素被重複複製
package arrslice
import "fmt"
//建立陣列切片主要有兩種方法-基於陣列建立和直接建立
func printarr(myslice int )
fmt.println("\n")
}//基於陣列建立
func creatarrslicefromarr()
//將陣列arr的所有元素都給陣列切片賦值
var myslice1 int = arr[:]
printarr(myslice1)
//將陣列arr的前五個元素給陣列切片賦值
var myslice2 int = arr[:5]
printarr(myslice2)
//將陣列arr的從第五個元素之後的元素賦值給陣列切片
var myslice3 int = arr[5:]
printarr(myslice3)
}//直接建立
func creatarrslice()
printarr(myslice3)
}//基於陣列切片建立陣列切片
func createarrslicefromslice()
myslice2 := myslice1[:]
printarr(myslice2)
} //建立乙個初始元素個數為5的陣列切片,元素初始值為0, 並預留10個元素的儲存空間
var myslice1 = make(int,5,20)
var myslice2 = int
fmt.println("len(myslice1) = ",len(myslice1),"\n")
fmt.println("cap(myslice1) = ",cap(myslice1),"\n")
//元素追加
//直接在陣列切片後面追加元素
printarr(myslice1)
//直接在陣列切片後追加另外乙個陣列切片
}//通過copy函式可以直接對陣列切片進行拷貝,但是如果兩個陣列切片不一樣大,就會按照其中小的那個切片大小來複製
func slicecopy()
myslice2 := int
copy(myslice1,myslice2)
printarr(myslice1)
}
**執行結果:
go語言學習 陣列 切片 map
go語言中陣列的特點 陣列的長度是固定的,並且長度也是陣列型別的一部分 是值型別,在賦值或者作為引數傳遞時,會複製整個陣列,而不是指標 定義陣列的語法 var arr1 5 int 5 int 未初始化的值,就預設初始化為該型別的預設值 var arr2 int 3 int 長度可由初始化的元素個數...
GO語言學習 切片
切片的長度可以用len獲得,容量由cap獲得.s1 make int,5 len s1 可以得到長度為5,cap s1 可以得到容量為5 s2 make int,5,8 len s2 可以得到長度為5,cap s2 可以得到容量為8 在s1中我沒有用make說明此切片的容量,因此他的容量和長度相等都...
go語言學習 四 陣列和切片
在go語言中,陣列和切片都是集合型別,他們都是用來儲存同一種型別的元素。1.陣列型別的長度是固定的,而切片型別的長度是可變長的。如下面 宣告乙個長度為5的陣列s1和長度為5的切片s2,s1 5 int s2 int但是s1是不可變的,而s2是可變的,可以增加元素,長度隨著元素數量而增長。因此陣列是乙...