go中的切片可对标python中的切片,是对数组的抽象,可以理解为动态数组,可通过一个不指定大小的数组来声明一个切片
go中切片的几种常用语法的示例程序如下:
一、通过make函数定义切片及使用len()和cap()函数
实例:
package main
import "fmt"
func main() {
通过make函数定义切片,第二、三个参数分别是切片初始长度和切片容量
var numbers = make([]int,3,5)
printSlice(numbers)
}
func printSlice(x []int) {
fmt.Printf("len=%d cap=%d slice=%v\n", len(x), cap(x), x)
}
运行结果:
二、 切片未初始化时为空(即等于nil)
实例:
package main
import "fmt"
func main() {
var numbers []int
printSlice(numbers)
if(numbers == nil) {
fmt.Printf("切片是空的\n")
}
}
func printSlice(x []int) {
fmt.Printf("len=%d cap=%d slice=%v\n", len(x), cap(x), x)
}
运行结果:
三、切片截取
实例如下:
package main
import "fmt"
func main() {
//创建切片
numbers := []int{0,1,2,3,4,5,6,7,8}
printSlice(numbers)
//打印原始切片
fmt.Println("numbers == ", numbers)
//打印子切片从索引1(包含)到索引4(不包含)
fmt.Println("numbers[1:4] == ", numbers[1:4])
//默认下限为0
fmt.Println("numbers[:3] == ", numbers[:3])
//默认上限为len(s)
fmt.Println("number[4:] == ", numbers[4:])
numbers1 := make([]int,0,5)
printSlice(numbers1)
//打印子切片从索引0(包含)到索引2(不包含)
number2 := numbers[:2]
printSlice(number2)
//打印子切片从索引2(包含)到索引5(不包含)
number3 := numbers[2:5]
printSlice(number3)
}
func printSlice(x []int) {
fmt.Printf("len=%d cap=%d slice=%v\n", len(x), cap(x), x)
}
运行结果:
四、切片增加元素与扩容
当需要对切片进行扩容时,只能通过定义一个新的切片,然后将原来的切片通过copy()函数拷贝到新的切片中
实例如下:
package main
import "fmt"
func main() {
var numbers []int
printSlice(numbers)
//向切片添加元素
numbers = append(numbers, 0)
printSlice(numbers)
//向切片添加多个元素
numbers = append(numbers, 1,2,3,4)
printSlice(numbers)
//创建一个新切片,容量是之前切片的两倍
numbers1 := make([]int, len(numbers), 2*cap(numbers))
//将numbers拷贝到numbers1
copy(numbers1, numbers)
printSlice(numbers1)
}
func printSlice(x []int) {
fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}
运行结果: