Golang:make,slice和append的一个小细节

这里好像没有人 · · 1958 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

这两天写代码的时候遇到了这么一个问题,就是向slice追加元素的这么一个简单的小问题,却由于疏忽,堵了好久,现在分享一下,避免以后再犯。

代码开始是这么写的:

urls := make(map[string]string, 3)
// 这里随便个例子
urls["baidu"] = "www.baidu.com"
urls["google"] = "www.google.com"
urls["csdn"] = "www.csdn.net"

names := make([]string, len(urls))
for key, _ := range urls {
    names = append(names, key)
}

乍一看,似乎应该就是这样,但实际上呢?我们先来看打印一下names,

fmt.Println(names)

得到了这样的输出:
这里写图片描述
当时写的匆忙,看了一眼输出,只是疑惑了一下,怎么多了接个几个空格?但没太在意,就是这么几个看上去的空格把我给坑惨了,后面获得的数据死活不对,在打印一下names的长度:
这里写图片描述
到这里问题应该就很明显了,低级失误啊!

我天真的以为我创建了一个空的slice,然后用append就能将他填满,
但是现实是append无论如何都是向slice的尾部追加数据,他才不管你slice空不空呢,原来的slice只有3个长度,现在每一次append都要重新分配一次内存,几次操作以后早已是物是人非了,所以只有老老实实的从[0]开始挨个向里填数据吧!


有疑问加站长微信联系(非本文作者)

本文来自:开源中国博客

感谢作者:这里好像没有人

查看原文:Golang:make,slice和append的一个小细节

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1958 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传