查看上一篇函數類型請點我
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]
查看下一篇接口類型請點我