比如这里要对一个数组进行切片
package main
import "fmt"
func main() {
array := [...]int{10, 20, 30, 0, 0} //三个点也可以不写
slice := array[0:3:5]
fmt.Println("slice = ", slice)
fmt.Println("len = ", len(slice))
fmt.Println("cap = ", cap(slice))
}
这里slice将会从array的第0个元素开始取,取到下标为3的元素,整个切片的容量为5-0=5个,长度为3-0=3个
结果为:
slice = [10 20 30] len = 3 //这里打印的是长度 cap = 5 //这里打印的是容量
这里可以看得出来 ,数组与切片最大的区别就是在方括号里有没有固定长度,如果有那么这是一个数组,没有的话那就是一个切片
package main import "fmt" func main() { a := [5]int{} //这种方式最常用,为自动推导类型 fmt.Printf("a len = %d, cap = %d ", len(a), cap(a)) b := make([]int, 4, 4) //使用make函数进行切片的创建,make(type, 长度,容量) fmt.Printf("b make len = %d, cap = %d ", len(b), cap(b)) c := make([]int, 3) //使用make函数,如果没有指定容量,那么它的默认值就跟长度相同 fmt.Printf("c make len = %d, cap = %d ", len(c), cap(c)) }
也有以下的情况:
a := array[:5] //从下标为0的元素开始取,取到第5个,长度为5,容量也为5 a := array[3:] //从下标为3的元素开始取,取到最后一个,长度与容量相同