
Go 数组与切片
数组与其他语言的区别
在 Go 中简单的定义
var arr [3]int
var arr1 = [3]int{1, 2, 3}
不指定数量的定义
var arr2 = [...]int{1, 2, 3, 4, 5}
二维数组的定义
arr4 := [...][2]int{{1, 3}, {6, 8}}
遍历时
// dex表示下标
for dex, e := range arr2 {
t.Log(dex, e)
}
t.Log("two new func")
for _, e1 := range arr4 {
t.Log(e1)
}
截取数组
// 截取从下标0开始到下标2之前
arr2[0:2]
完整Demo:https://github.com/geektime-geekbang/go_learning/blob/master/code/ch6/array_test/array_test.go
切片
相当于c#中的span共享内存的方式,下面我们来了解这三个方法
方法名 | 意义 |
---|---|
len() | 获取数组或切片数据的长度 |
cap() | 获取切片内存占用大小的长度 |
make | 定义切片的大小与内存的长度 |
切片的定义
t0 := []int{1, 2, 3}
// 长度为3,内存占用5
t1 := make([]int, 3, 5)
如何区分 len() 与 cap() 我们举一个简单的例子
func TestSliceGrowing(t *testing.T) {
s := []int{}
for i := 0; i < 10; i++ {
s = append(s, i)
t.Log(&s[0], len(s), cap(s))
}
}
其内部结构体,所以append时要重新获取,但当append添加数超过len时,cap会以两倍当形势增长,当cap变化时地址都不一样
那么当有多个截断操作会怎么样,cap会是多少?
func TestSliceShareMemory(t *testing.T) {
year := []string{"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep",
"Oct", "Nov", "Dec"}
Q2 := year[3:6]
t.Log(Q2, len(Q2), cap(Q2))
summer := year[5:8]
t.Log(summer, len(summer), cap(summer))
summer[0] = "Unknow"
t.Log(Q2)
t.Log(year)
year = append(year, "None")
t.Log(year, len(year), cap(year), &year[0])
t.Log(summer, len(summer), cap(summer), &summer[0])
t.Log(Q2, len(Q2), cap(Q2), &Q2[0])
}
cap大致为多少以下列图作为参考
结果如下:
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
评价
排名
6
文章
6
粉丝
16
评论
8
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 :
好是好,这个对效率影响大不大哇,效率高不高
一个bug让程序员走上法庭 索赔金额达400亿日元
剑轩 : 有点可怕
ASP.NET Core 服务注册生命周期
剑轩 :
http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术