赞
踩
注:本文以Windos系统上Go SDK 1.18进行讲解
func main() {
var a []int
if a == nil {
fmt.Println("yes")//输出:yes
} else {
fmt.Println("no")
}
fmt.Println(len(a), cap(a)) //0 0
}
func main() {
var a = []int{1, 2}
fmt.Println(a, len(a), cap(a)) //[1,2] 2 2
}
以下说明切片并不改变原来的元素
对于数组,指向数组的指针,或切片a(注意不能是字符串)支持完整切片表达式:
a[low : high : max]
上面的代码会构造与简单切片表达式a[low: high]相同类型、相同长度和元素的切片。另外,它会将得到的结果切片的容量设置为max-low。
完整切片表达式需要满足的条件是0 <= low <= high <= max <= cap(a),其他条件和简单切片表达式相同
注意:在完整切片表达式中只有第一个索引值(low)可以省略;它默认为0。
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))
}
/*
s:[2 3] len(s):2 cap(s):4
*/
func main() {
a := [5]int{1, 2, 3, 4, 5}
t1 := a[1:3:3]
fmt.Printf("t:%v len(t):%v cap(t):%v\n", t1, len(t1), cap(t1)) //t:[2 3] len(t):2 cap(t):2
t2 := a[1:3:4]
fmt.Printf("t:%v len(t):%v cap(t):%v\n", t2, len(t2), cap(t2)) //t:[2 3] len(t):2 cap(t):3
t3 := a[1:3:5]
fmt.Printf("t:%v len(t):%v cap(t):%v\n", t3, len(t3), cap(t3)) //t:[2 3] len(t):2 cap(t):4
}
func main() {
a := [5]int{1, 2, 3, 4, 5}
t1 := a[:3:3]
fmt.Printf("t:%v len(t):%v cap(t):%v\n", t1, len(t1), cap(t1)) //t:[1 2 3] len(t):3 cap(t):3
t2 := a[:3:4]
fmt.Printf("t:%v len(t):%v cap(t):%v\n", t2, len(t2), cap(t2)) //t:[1 2 3] len(t):3 cap(t):4
t3 := a[:3:5]
fmt.Printf("t:%v len(t):%v cap(t):%v\n", t3, len(t3), cap(t3)) //t:[1 2 3] len(t):3 cap(t):5
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。