Golang:make,slice和append的一个小细节
发布时间:2020-12-16 19:21:32 所属栏目:大数据 来源:网络整理
导读:这两天写代码的时候遇到了这么一个问题,就是向slice追加元素的这么一个简单的小问题,却由于疏忽,堵了好久,现在分享一下,避免以后再犯。 代码开始是这么写的: urls := make ( map [ string ] string , 3 ) // 这里随便个例子 urls[ "baidu" ] = "www.ba
这两天写代码的时候遇到了这么一个问题,就是向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)
得到了这样的输出: 我天真的以为我创建了一个空的slice,然后用append就能将他填满, 但是现实是append无论如何都是向slice的尾部追加数据,他才不管你slice空不空呢,原来的slice只有3个长度,现在每一次append都要重新分配一次内存,几次操作以后早已是物是人非了,所以只有老老实实的从[0]开始挨个向里填数据吧! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |