初識golang-數據類型_切片類型

查看上一篇函數類型請點

golang的切片相當於python的list,但是也有不同。切片本身不包含任何數據。它僅僅是底層數組的一個上層表示。對切片進行的任何修改都將反映在底層數組中,把切片當作可變數組使用就可以了。

1.切片的初始化:切片的初始化主要有三種方式

1)make 

var 切片名 = make([]切片內數據類型, 切片長度, 切片容量)

其中capacity(切片容量)爲可選參數,當缺失時和長度值一致,個人覺得初學者不需要太過在意capacity這個值,下面舉個例子 :

var slice1 = make([]int, 5)
slice2 := make([]int, 3, 4)

2)字面量方式

var slice2 []int = []int{1,2,3}

3)由源數組或源切片生成切片

從源數組生成切片:

var arr [5]int
slice3 := arr[:2]

從源切片生成切片:

slice4 := slice2[:2]

2.切片內置方法len()和cap()

len():獲取切片長度
cap():獲取數組容量

package main

import "fmt"

func main() {
	s := []int{1,2,3,4,5}
	fmt.Println(len(s),cap(s),s)
}

輸出結果:

5 5 [1 2 3 4 5]

3.切片內置方法append()和copy()

通過append可以向切片中添加數據,切片的長度會動態增長,當添加元素個數超過切片容量後,切片會以2倍長度進行擴容。

package main

import "fmt"

func main() {
	var s = [5] int {1, 2, 3, 4, 5}
	fmt.Println(len(s),cap(s),s)

	s1 := s[0:3]
	fmt.Println(len(s1), cap(s1),s1)

	s1 = append(s1, 1, 2, 3) 
	fmt.Println(len(s1), cap(s1), s1)
}

運行結果:

5 5 [1 2 3 4 5]
3 5 [1 2 3]
6 10 [1 2 3 1 2 3]

通過copy()函數可以對切片進行復制,是深拷貝。

package main

import "fmt"

func main() {
	s := []int{1,2}
	fmt.Println(len(s),cap(s),s)

	s1 := make([]int,len(s),cap(s)*2)
	copy(s1,s)
	fmt.Println(len(s1),cap(s1),s1)
	
	s = append(s,3)
	fmt.Println(len(s),cap(s),s)
	fmt.Println(len(s1),cap(s1),s1)
}

運行結果:

2 2 [1 2]
2 4 [1 2]
3 4 [1 2 3]
2 4 [1 2]

查看下一篇接口類型請點

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