一、slice切片
1、切片是数组的一个引用,因此切片是引用类型,在进行传递时,遵守引用传递的机制。
2、切片的使用和数组类似,遍历切片、访问切片的元素和求切片长度len(slice)都一样。
3、切片的长度是可以变化的,因此切片是一个可以动态变化数组。
基本语法:
var 切片名 []类型 == var num []int
二、基本使用
package main
import (
"fmt"
)
func main(){
//定义一个数组
arr := [...]int{1,2,3,4,5,6}
//定义一个切片
//包含下标为一的数,不包含下标为3的数
slice := arr[1:3]
fmt.Println("arr=",arr)
fmt.Println("slice的元素为:",slice)
fmt.Println("slice的长度为:",len(slice))
fmt.Println("slice的容量为:",cap(slice)) //这个容量是一个不确定的数
}
三、内存图
四、使用切片的三种方式
第一种方式:定义一个切片,然后让切片去引用一个已经创建好的数组(参考基本使用代码)
第二种方式:通过make来创建切片,第一种方式我们可以看到数组,make创建不能看到数组。
package main
import (
"fmt"
)
func main(){
//使用make
var slice []float64 = make([]float64,5,10)
slice[0] = 10
slice[4] = 20
fmt.Println(slice)
fmt.Println("slice的长度为:",len(slice))
fmt.Println("slice的容量为:",cap(slice))
}
第三种、定义一个切片,直接就指定具体数组,使用原理类似make的方式
package main
import (
"fmt"
)
func main(){
slice := []string{"tom","cat","dog"}
fmt.Println(slice)
fmt.Println("长度为:",len(slice))
fmt.Println("容量为:",cap(slice))
}
五、遍历切片
方式一、for循环常规方式遍历
package main
import (
"fmt"
)
func main(){
arr := [...]int{10,20,30,4,8,5,4}
slice := arr[1:3]
for i := 0; i < len(slice); i++ {
fmt.Println(i,slice[i])
}
}
方式二、使用for-range
package main
import (
"fmt"
)
func main(){
arr := [...]int{10,20,30,4,8,5,4}
slice := arr[1:3]
for _,val := range slice {
fmt.Println(val)
}
}