首页后端开发GOgo的数据类型-复合数据类型-slice(二)

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

时间2023-04-26 12:51:01发布访客分类GO浏览1167
导读:切片的定义在Go语言中,可以通过make函数和切片字面量(slice literal)两种方式来创建切片。使用make函数创建切片make函数的声明如下:func make([]T, len, cap []T其中,T表示切片的元素类型,l...

切片的定义

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

使用make函数创建切片

make函数的声明如下:

func make([]T, len, cap) []T

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

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

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

slice := make([]T, len, cap)

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

goCopy codepackage main

import "fmt"

func main() {

    slice := make([]int, 3, 5)
    fmt.Printf("slice=%v, len=%d, cap=%d\n", slice, len(slice), cap(slice))
}

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

slice=[0 0 0], len=3, cap=5

使用切片字面量创建切片

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

[]T{
v1, v2, ..., vn}

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

package main

import "fmt"

func main() {

    slice := []int{
1, 2, 3}

    fmt.Printf("slice=%v, len=%d, cap=%d\n", slice, len(slice), cap(slice))
}

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

slice=[1 2 3], len=3, cap=3

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

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)
}
    

输出结果:

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的切片。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

go

若转载请注明出处: go的数据类型-复合数据类型-slice(二)
本文地址: https://pptw.com/jishu/9243.html
go的数据类型-复合数据类型-map(二) go的数据类型-复合数据类型-slice(一)

游客 回复需填写必要信息