//切片是一个拥有相同类型元素的可变长度的动态数组,支持自动扩容(动态数组),与数组很相似,只是长度可变,可追加元素
//切片它的内部结构包含地址,长度,容量,切片一般用于快速地操作一块数据集合
//切片的长度就是它已包含的元素个数,容量就是没扩容之前能放元素的个数
//我们可以用len()方法来得到切片的长度、用cap()方法来得到切片的容量。
package main
import "fmt"
func main() {
//声明方法一
var a []string //声明一个字符串切片,但没有初始化,没有底层数组,在内存中不存在,==nil,是空
var b = []int{0, 1, 2, 3, 4} //声明整型切片并初始化,长度,容量均是5
fmt.Println(b, len(b), cap(b))
var c = []bool{true, false} //声明bool型切片
fmt.Println(a, b, c)
//方法二:基于数组定义切片
//如果从索引0 开始切片,那么容量是不会产生变化的
//如果从其他索引开始切片的话那么他的容量是起始位到结束位的个数, 那么它底层数组的容量将会改变,引用地址就会发生变化
array1 := [5]int{55, 56, 57, 58, 59} //这是数组
array2 := array1[1:4] //基于数组array1创建切片,包含元素a[1],a[2],a[3],容量4
fmt.Println(array2, len(array2), cap(array2))
fmt.Printf("type of array2:%T\n", array2)
//方法三,切片再次得到切片
array3 := array2[1:]
fmt.Println(array3, cap(array3)) //容量3
//方法4:make函数构造切片
slice1 := make([]int, 5, 10) //int类型切片,给定长度是5,容量是10
fmt.Println(slice1, len(slice1), cap(slice1))
fmt.Printf("%T\n", slice1)
}
这是运行结果呢:
[0 1 2 3 4] 5 5
[] [0 1 2 3 4] [true false]
[56 57 58] 3 4
type of array2:[]int
[57 58] 3
[0 0 0 0 0] 5 10
[]int
路还很长,但坚持一定能看到风光,我坚信读书能带来富足,如果你没有,那就是你读的还不够多
一定要加油!!!