Go语言学习笔记 - PART5 - 数组与切片

数组是具有相同类型的一组长度固定的数据序列

  • 如果想让数组中的元素为任意类型,可以使用空接口作为数组的类型

数组声明方式

var identifier [len]type

数组初始化方式

  • for循环初始化数组
    var arr1 [5]int
    
    // for循环初始化数组
	for i:=0; i < len(arr1); i++ {
		arr1[i] = i * 2
	}
复制代码
  • new函数创建数组
    var arr1 = new([5]int)
复制代码

通过new函数创建数组,返回的是指针类型的数组变量 *[5]int

  • 数组常量方式创建数组
    var arr1 = [5]int{18, 20, 15, 22, 16}
	var arr2 = [...]int{5, 6, 7, 8, 22}
	var arr3 = []int{5, 6, 7, 8, 22}	//注:初始化得到的实际上是切片slice
	var arr4 = [5]string{3: "Chris", 4: "Ron"}
复制代码

数组在函数中传递

大数组在函数中传递会消耗很多内存,可以通过传递数组指针或者使用数组切片来避免

切片

  • 切片是对数组一个连续片段的引用(切片是一个引用类型)

切片声明与初始化方式

    // 切片声明
    var identifier []type
    // 初始化
    // 表示 slice1 是由数组 arr1 从 start 索引到 end-1 索引之间的元素构成的子集
    var slice1 []type = arr1[start:end]
复制代码

切片的内存结构

切片实际上是一个结构体,用三个字段:指向相关数组的指针,切片长度,切片容量

make()函数创建切片

如果切片相关的数组还没定义,可以先用make()函数创建切片

var slice1 []type = make([]type, len)
slice2 := make([]type, len)
slice3 := make([]type, len, cap)
复制代码
  • make方法生成的切片的内存结构

make函数和new函数都可以生成切片

  • make([]int, 2, 5)
  • new([5]int)[2:5]

new()跟make()的区别

  • new()为每个类型分配一片内存,初始化为0并且返回类型为*T的内存地址,** 适用于数组、结构体 **

返回一个指向类型为T,值为0的地址的指针,相当于&T{}

  • make()返回一个类型为T的初始值,仅适用于三种内建的引用类型:切片、map和channel

切片重组

改变切片长度的过程称为切片重组(reslicing)

    var ar = [10]int{0,1,2,3,4,5,6,7,8,9}
    var a = ar[5:7] // 截断为{5,6},len = 2、capacity = 5
    a = a[0:4] // 截断为{5,6,7,8},len = 4、capacity = 5
复制代码

入门教程推荐: github.com/Unknwon/the…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值