go的数据类型-复合数据类型-slice(二)

2023-04-19 21:08:59 浏览数 (1)

切片的定义

在Go语言中,可以通过make函数和切片字面量(slice literal)两种方式来创建切片。

使用make函数创建切片

make函数的声明如下:

代码语言:javascript复制
func make([]T, len, cap) []T

其中,T表示切片的元素类型,len表示切片的长度,cap表示切片的容量。lencap的区别在于:

  • len表示切片中实际存储的元素个数,即切片的长度;
  • cap表示切片中底层数组的容量,即切片的最大长度。

使用make函数创建切片的语法如下:

代码语言:javascript复制
slice := make([]T, len, cap)

其中,T表示切片的元素类型,len表示切片的长度,cap表示切片的容量。下面是一个使用make函数创建切片的例子:

代码语言:javascript复制
goCopy codepackage main

import "fmt"

func main() {
    slice := make([]int, 3, 5)
    fmt.Printf("slice=%v, len=%d, cap=%dn", slice, len(slice), cap(slice))
}

上面的代码中,创建了一个长度为3,容量为5的切片,切片中的元素类型为int。输出的结果为:

代码语言:javascript复制
slice=[0 0 0], len=3, cap=5

使用切片字面量创建切片

切片字面量是一种简洁的方式来创建切片,其语法如下:

代码语言:javascript复制
[]T{v1, v2, ..., vn}

其中,T表示切片的元素类型,v1v2、...、vn表示切片中的元素。下面是一个使用切片字面量创建切片的例子:

代码语言:javascript复制
package main

import "fmt"

func main() {
    slice := []int{1, 2, 3}
    fmt.Printf("slice=%v, len=%d, cap=%dn", slice, len(slice), cap(slice))
}

上面的代码中,创建了一个包含3个元素的切片,切片中的元素分别为1、2和3。输出的结果为:

代码语言:javascript复制
slice=[1 2 3], len=3, cap=3

在使用切片字面量创建切片时,可以省略切片容量的声明,Go语言会根据切片的长度自动计算容量。例如:

代码语言:javascript复制
package main

import "fmt"

func main() {
    // 创建一个切片
    slice1 := make([]int, 3)

    // 打印切片的长度和容量
    fmt.Println("len:", len(slice1))
    fmt.Println("cap:", cap(slice1))

    // 打印切片的值
    fmt.Println("slice1:", slice1)

    // 向切片中添加元素
    slice1 = append(slice1, 4, 5, 6)

    // 打印切片的长度和容量
    fmt.Println("len:", len(slice1))
    fmt.Println("cap:", cap(slice1))

    // 打印切片的值
    fmt.Println("slice1:", slice1)

    // 创建一个长度为5,容量为10的切片
    slice2 := make([]int, 5, 10)

    // 打印切片的长度和容量
    fmt.Println("len:", len(slice2))
    fmt.Println("cap:", cap(slice2))

    // 打印切片的值
    fmt.Println("slice2:", slice2)
}

输出结果:

代码语言:javascript复制
len: 3
cap: 3
slice1: [0 0 0]
len: 6
cap: 6
slice1: [0 0 0 4 5 6]
len: 5
cap: 10
slice2: [0 0 0 0 0]

在这个示例中,我们创建了两个切片slice1slice2,并使用make函数来分配内存空间。slice1的长度和容量都为3,初始值都是0。我们向slice1中添加了三个元素4、5和6,此时slice1的长度变成了6,容量也变成了6。slice2的长度为5,容量为10,初始值都是0。

在Go中,切片可以自动扩容,当容量不足时,系统会重新分配一块更大的内存,将原来的元素复制到新的内存中,并返回新的切片。append函数可以向切片中添加元素,如果切片的容量不足,系统会自动扩容。

切片的长度可以使用len函数来获取,容量可以使用cap函数来获取。如果想要手动指定切片的容量,可以在创建切片时传入第二个参数,例如make([]int, 5, 10)表示创建一个长度为5,容量为10的切片。

go

0 人点赞