[Golang]这几个for-range的坑,你们一定要知道,铁汁

本文详细探讨了Golang中for-range循环的常见问题,包括指针数据坑,迭代修改变量时的注意事项,以及是否会引发死循环。通过实例代码分析了解决方案,并介绍了在迭代中删除和添加元素的特殊用法。最后提醒开发者,实践是提升编程技能的关键。

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

前言

读者A:不会吧,阿Sir,这周这么高产~~~

asong:当然啦,为了你们,一切都值得~~~

读者B:净放臭屁屁,就你戏多~~~

asong:你凶人家,坏坏~~~

哈哈哈,戏太足了奥。自导自演可还行。今日分享之前,先放松放松嘛,毕竟接下来的知识,还是需要我们思考的。今天给大家分享的是go中的range,这个我们在实际开发中,是经常使用,但是他有一个坑,使用不好,是要被开除的。但是,今天你恰好看了我这一篇文章,就避免了这个坑,开心嘛~~~。直接笑,别克制,我知道你嘴角已经上扬了。

废话结束,我们直接开始。

正文

1. 指针数据坑

range到底有什么坑呢,我们先来运行一个例子吧。

package main

import (
	"fmt"
)

type user struct {
   
	name string
	age uint64
}

func main()  {
   
	u := []user{
   
		{
   "asong",23},
		{
   "song",19},
		{
   "asong2020",18},
	}
	n := make([]*user,0,len(u))
	for _,v := range u{
   
		n = append(n, &v)
	}
	fmt.Println(n)
	for _,v := range n{
   
		fmt.Println(v)
	}
}

这个例子的目的是,通过u这个slice构造成新的slice。我们预期应该是显示uslice的内容,但是运行结果如下:

[0xc0000a6040 0xc0000a6040 0xc0000a6040]
&{
   asong2020 18}
&{
   asong2020 18}
&{
   asong2020 18}

这里我们看到n这个slice打印出来的三个同样的数据,并且他们的内存地址相同。这是什么原因呢?先别着急,再来看这一段代码,我给他改正确他,对比之后我们再来分析,你们才会恍然大悟。

package main

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值