前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >go的数据类型-复合数据类型-slice(二)

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

原创
作者头像
堕落飞鸟
发布2023-04-19 21:08:59
发布2023-04-19 21:08:59
19400
代码可运行
举报
文章被收录于专栏:飞鸟的专栏飞鸟的专栏
运行总次数:0
代码可运行

切片的定义

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

使用make函数创建切片

make函数的声明如下:

代码语言:javascript
代码运行次数:0
复制
func make([]T, len, cap) []T

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

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

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

代码语言:javascript
代码运行次数:0
复制
slice := make([]T, len, cap)

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

代码语言:javascript
代码运行次数:0
复制
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。输出的结果为:

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

使用切片字面量创建切片

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

代码语言:javascript
代码运行次数:0
复制
[]T{v1, v2, ..., vn}

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

代码语言:javascript
代码运行次数:0
复制
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。输出的结果为:

代码语言:javascript
代码运行次数:0
复制
slice=[1 2 3], len=3, cap=3

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

代码语言:javascript
代码运行次数:0
复制
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
代码运行次数:0
复制
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的切片。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 切片的定义
    • 使用make函数创建切片
    • 使用切片字面量创建切片
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档