go的经典坑之append map

博客讨论了Go语言中使用append追加res值时会刷新之前值的问题。若实际工作需用变量res进行append,可将全局res注释,在for循环里定义为局部变量,这样每次循环会重新定义res,避免刷新之前的值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package main

import (
	"fmt"
	"strings"
)
func main() {
	tt := "aa, bb, cc, dd"
	res := make(map[string]interface{})
	ret := make([]map[string]interface{}, 0)
	fmt.Println("start-->ret",ret)
	for k,v := range strings.Split(tt, ",") {
		//res := make(map[string]interface{})
		fmt.Println(k,"for--1-->ret:", ret)
		res["name"] = v
		fmt.Println(k,"for--2-->ret:", ret)
		//ret = append(ret, map[string]interface{}{"name":v})
		ret = append(ret, res)
		fmt.Println(k,"for--res:", res)
		fmt.Println(k,"for--3-->ret:", ret)
	}
	fmt.Println("end-->ret:", ret)

运行结果为:

结果就是追加res的值时,会同时刷新之前的值,而此时如果将

ret = append(ret, res)

注释,而将

//ret = append(ret, map[string]interface{}{"name":v})

放开的话,得到理想结果:

如果实际工作中必须要用到变量例如res来进行append呢,此时该怎么办?那就是将一开始定义的全局res注释掉,改成到for循环里面去进行定义,当res成为局部变量之后,每次循环结束之后进入新的循环时对res进行了重新定义,就不会出现对之前的res值进行刷新的动作了。

此为个人理解,如果有错误之处请求留言指出,本人好加以修正,谢谢!

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值