for _, cg := range consumers {
		log.Logger.Infof("%p", cg)
		utils.SafeGo(func() {
			log.Logger.Infof("%#v", cg)
			log.Logger.Infof("%p", cg)
			StartConsumer(ctx, cfg.Endpoint, cfg.AccessKey, cfg.SecretKey, cg)
		})
	}
输出:
0xc000683540
0xc000683560
&queue.Test2{groupName:"test2"}
&queue.Test2{groupName:"test2"}
0xc000683560
0xc000683560
consumers 包含两个元素,值都是指针。 1.22 版本开始 range 每次不是会创建新变量了吗?为什么我 SafeGo 里面 cg 拿到的还是最后一个的值?
|      1fireice      345 天前 用匿名函数的参数传进去就 ok 了 | 
|      3zealot0630      345 天前 via Android cg 变量从头到尾都只有一个啊,所有匿名函数捕获的变量都指向这同一个 cg | 
|  |      4pike0002      345 天前  1 检查下 go.mod 里面的 go 的版本,如果是 1.22 之前的话新的特性就不会生效 | 
|      5dyllen OP @zealot0630 每次循环 cg 变量都是不同的,你看输出的指针地址。 https://go.dev/play/p/kV2gxXfzVfc 你看看整个测试代码,我帖子里面的代码和这个测试的一样的,就除了 slice 的数据类型不同。 |