GO语言:slice切片

本文详细介绍了GO语言中的slice切片,包括如何通过直接定义、数组获取、切片再切片和make()函数创建切片。强调切片作为引用类型与数组的区别,讨论了切片的长度、容量及其操作,如append()函数的使用和切片删除元素的方法。重点解析了append()函数导致的切片扩容策略和内存管理。
摘要由CSDN通过智能技术生成

GO语言:slice切片

注意:在go语言中,切片属于引用类型,数组属于数值类型

	var arr = [3]int{
   1, 2, 3}
	var slice = []int{
   1, 2, 3}
	temp1 := arr
	fmt.Printf("arr:%p temp1:%p\n", &arr, &temp1)
	temp2 := slice
	fmt.Printf("slice:%p temp2:%p\n", slice, temp2)
arr:0xc00000a3e0 temp1:0xc00000a420
slice:0xc00000a400 temp2:0xc00000a400

可以看到arr与temp1地址不同,而slice与temp2地址相同
试图更改temp1,temp2中的数据

	temp1[0] = 100
	temp2[0] = 100
	fmt.Printf("arr:%v temp1:%v\n", arr, temp1)
	fmt.Printf("slice:%v temp2:%v\n", slice, temp2)
arr:[1 2 3] temp1:[100 2 3]
slice:[100 2 3] temp2:[100 2 3]

数组arr中的元素值并没有改变,而切片slice中的元素值发生了变化,更加证明:
在go语言中,数组是数值类型,切片是引用类型

如何得到切片

1.直接定义

	// 切片的定义
	// 数组是数值类型,切片是引用类型
	var s1 []int // 定义一个存放int类型元素的切片
	var s2 []string
	fmt.Println(s1, s2)
	// 初始化
	// 底层都是创建数组,封装成切片返回的,所以长度和容量相等
	s1 = []int{
   1, 2, 3}
	s2 = []string{
   "北京", "上海", "深圳"}

定义切片后,未初始化时切片指针指向为nil
该种方式其实是在底层创建了数组,进行切片封装后返回的,所以切片的长度和容量相等

2.由数组得到切片

	// 由数组得到切片
	a1 := [...]int{
   1, 3, 5, 7, 9, 11, 13}
	// 左闭右开
	s3 := a1[0:4
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值