Go語言中數組與切片的區別?有哪幾種方式可以創建切片?

Go 中數組屬於基本類型,他們之間的賦值 是值傳遞/值拷貝;

Go語言中,區別一個變量是數組還是切片,就看有沒有定義長度; 

 

func main() {
	array1 := [3]int{}
	array2 := [2]int{1,2}
	array3 := [2]int{4,5}

	//array2 = array1 //報錯! Cannot use 'array1' (type [3]int) as type [2]int in assignment
	array2 = array3
	array3[0] = 6
	fmt.Println(array1, array2, array3)
	//輸出:[0 0 0] [4 5] [6 5]
	//Go 中,數組屬於基本類型,他們直接的賦值 是值傳遞/值拷貝

	//切片
	//切片並不存在任何元素而只是對現有數組的引用 (是指針傳遞/指針拷貝)

	//都有哪些方法可以創建一個切片?
	//1。 通過數組創建一個切片
	array10 := [3]int{1,2,3}
	//將數組下標從1處 到下標2處 的元素轉化爲一個切片(前閉後開)
	slice10 := array10[1:2]
	fmt.Println(array10, slice10)
	//輸出:[1 2 3] [2]

	//2。直接聲明一個切片
	//記住 在Go語言中,區別一個變量是數組還是切片,就看有沒有定義長度。
	//有定義長度就是數組 如:array10; 沒有定義長度就是切片 如:slice2
	slice2 := []int{1,2,3}
	fmt.Println(reflect.TypeOf(array10), reflect.TypeOf(slice2))
	//輸出:[3]int []int

	//3。通過make 函數創建一個切片
	//[]int 指定切片的類型; 3是切片的長度;6是切片的容量
	slice3 := make([]int, 3, 6)
	fmt.Println(slice3, reflect.TypeOf(slice3))
	// 輸出:[0 0 0] []int

	//4。通過切片生成一個切片
	slice4 := []int{1,2,3,4,5,6}
	slice5 := slice4[0:1]
	fmt.Println(reflect.TypeOf(slice4), reflect.TypeOf(slice5))
	//[]int []int
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章