package main
import "fmt"
func main(){
data := []int{1, 2, 3, 4, 5}
fmt.Println(data[0:3])
fmt.Println(data[3:])
fmt.Println(data[:3])
fmt.Println(data[:])
fmt.Println(len(data))
fmt.Println(cap(data))
}
package main
import "fmt"
func show(x []int) {
fmt.Println(len(x), cap(x), x)
}
func main(){
var slice []int = make([]int, 10, 15)
show(slice)
}
package main
import "fmt"
func main(){
var names []string
names = append(names, "Tom")
names = append(names, "Jack", "Lisa")
var data []string = make([]string, 5, 10)
copy(data, names)
fmt.Println(names)
fmt.Println(data)
}
切片的长度与最大容量的区别
1. go语言中,数组的长度是固定的
2. slice只是基于数组的一种抽象类型,它自身并没有保存什么数据,它只是指向了一个数组而已
3. 假设指向的数组长度是L,slice指向第n个元素
4. 切片的容量就是L-n
5. 切片的长度就是在n到L之间允许你访问的长度(所以切片的长度<=最大容量)
package main
import "fmt"
func printSlice(x []int) {
fmt.Println("len =", len(x), "cap =", cap(x), x)
}
func main(){
nums := []int{1, 2, 3, 4, 5}
nums = nums[:0]
printSlice(nums)
nums = nums[1:3]
printSlice(nums)
nums = nums[1:3]
printSlice(nums)
}