//再用string试一下,然后循环对string进行重新赋值,最后追加到一个slice里 为什么string重新赋值可以,而map不行呢(其实slice也不行)
go 当对map和string 重新赋值,产生的结果不一样
//make 一个map,然后循环对map进行重新赋值,最后追加到一个slice里 func main(){ var data = make(map[string]interface{}, 0) var res []map[string]interface{} var testSlice = []int{1,2,3,4,5} for _,v :=range testSlice{ data["key"] = v fmt.Println(data) //打印结果 //[map[key:1] //map[key:2] //map[key:3] //map[key:4] //map[key:5] res = append(res, data) } fmt.Println(res) // 结果很奇怪不是[map[key:1] map[key:2] map[key:3] map[key:4] map[key:5]] //而是 [map[key:5] map[key:5] map[key:5] map[key:5] map[key:5]]
func main(){ var s string var ss []string var i = []int{1,2,3,4,5} for _,v :=range i{ s = cast.ToString(v)//int转换string ss = append(ss, s) } fmt.Println(ss) //而是 [1,2,3,4,5] }
map若不是深拷贝并没有生成新的空间,就是所谓的浅拷贝,不管你怎么改变他,最后都会有同根性,最后一个改的是啥前面的都是那个值不懂深拷贝参考这篇深拷贝和浅拷贝文章当然这个例子要正确返回值很简单,只要make在循环里面就好了
//make 一个map,然后循环对map进行重新赋值,最后追加到一个slice里 func main(){ var res []map[string]interface{} var testSlice = []int{1,2,3,4,5} for _,v :=range testSlice{ //这样每次都是一个新的空间 var data = make(map[string]interface{}, 0) data["key"] = v fmt.Println(data) //打印结果 //[map[key:1] //map[key:2] //map[key:3] //map[key:4] //map[key:5] res = append(res, data) } fmt.Println(res) //[map[key:5] map[key:5] map[key:5] map[key:5] map[key:5]]
有些问题改起来可能很简单,但是知道原因可能就没那么简单
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算