func main() { // 声明切片类型 var a []string //声明一个字符串切片 var b = []int{} //声明一个整型切片并初始化 var c = []bool{false, true} //声明一个布尔切片并初始化 var d = []bool{false, true} //声明一个布尔切片并初始化 fmt.Println(a) //[] fmt.Println(b) //[] fmt.Println(c) //[false true] fmt.Println(a == nil) //true fmt.Println(b == nil) //false fmt.Println(c == nil) //false // fmt.Println(c == d) //切片是引用类型,不支持直接比较,只能和nil比较 }
切片拥有自己的长度和容量, 我们可以使用内置的 len() 函数求长度,使用内置的 cap() 函数求切片的容量。
func main() { a := [5]int{1,2,3,4,5} s := a[1:3] fmt.Printf("%s:%v len(s):%v cap(s):%v\n",s,len(s),cap(s)) } // 输出: // s:[2 3] len(s):2 cap(s):4
对切片在执行切片(切片再切片)
func main() { a := [5]int{1, 2, 3, 4, 5} s := a[1:3] // s := a[low:high] fmt.Printf("s:%v len(s):%v cap(s):%v\n", s, len(s), cap(s)) s2 := s[3:4] // 索引的上限是cap(s)而不是len(s) fmt.Printf("s2:%v len(s2):%v cap(s2):%v\n", s2, len(s2), cap(s2)) } //结果: //s:[2 3] len(s):2 cap(s):4 //s2:[5] len(s2):1 cap(s2):1
对于数组,指向数组的指针,或切片a(注意不能是字符串) 支持完整切片表达式:
a[low : high : max]
最终得到的结果切片容量设置为max-low。 在完整切片表达式中只有第一个索引值(low) 可以省略。它默认为0.
func main() { a := [5]int{1, 2, 3, 4, 5} t := a[1:3:4] fmt.Printf("t:%v len(t):%v cap(t):%v\n", t, len(t), cap(t)) }
//输出结果:
t:[2 3] len(t):2 cap(t):3
上面都是基于数组来创建的切片,如果要动态的创建一个切片,我们就需要使用内置的 make()函数
例:
func main() { a := make([]int, 2, 10) fmt.Println(a) //[0 0] fmt.Println(len(a)) //2 fmt.Println(cap(a)) //10 }
原文:https://www.cnblogs.com/s686zhou/p/12775614.html