go数组和切片

## 数组

数组是由相同类型元素的集合组成的数据结构,计算机会为数组分配一块连续的内存来保存其中的元素,为们可以利用数组中元素的索引快速访问特定元素。

声明
```
[10]int
[200]interface{}
```

示例
```
var arr [3]int
arr[0] = 1
arr[1] = 2
arr[2] = 3
```


---

## 切片

切片,即动态数组,其长度不固定,我们可以向切片中追加元素,它会在容量不足时自动扩容。   

我们其实可以把切片看做是对数组的一层简单的封装,因为在每个切片的底层数据结构中,一定会包含一个数组。数组可以被叫做切片的底层数组,而切片也可以被看作是对数组的某个连续片段的引用。所以,Go 语言的切片类型属于引用类型。  

我们通过调用内建函数`len`,得到数组和切片的长度。通过调用内建函数`cap`,我们可以得到它们的容量。

当一个切片无法容纳更多的元素的时候,切片就回去做扩容操作。但它并不会改变原来的切片,而是会生成一个容量更大的切片,然后把原有的元素和新元素一起拷贝到新切片中。在一般的情况下,你可以简单地认为新切片的容量(以下简称新容量)将会是原切片容量(以下简称原容量)的 2 倍。   

但是,当原切片的长度(以下简称原长度)大于或等于1024时,Go 语言将会以原容量的1.25倍作为新容量的基准(以下新容量基准)。新容量基准会被调整(不断地与1.25相乘),直到结果不小于原长度与要追加的元素数量之和(以下简称新长度)。最终,新容量往往会比新长度大一些,当然,相等也是可能的。


声明
```
[]int
[]interface{}
```

示例
```
slice1 := []int{1, 2, 3}

slice2 := make([]int, 0)
// 添加元素
slice2 = append

fmt.Printf("slice len: %d \n", len(slice2))
fmt.Printf("slice len: %d \n", cap(slice2))
```

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值