searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

go语言 for range 循环进行append操作遇到的坑

2023-04-10 01:43:43
63
0

问题描述:

在某项目代码中,由于避免golang中的零值问题,在定义结构体时,将某字段的类型定义为了指针(*uint8),在后续操作中需要生成结构体切片返回,然后在for range中对slice进行append地址操作时,发现slice中的值全部一样且为for range中的最后一个。简化代码如下:

结果如下

 

总结原因

最终总结出原因是在for range语句中,创建了变量num且只被创建了一次。即num有自己的空间内存且地址在for循环过程中不变,循环过程中每次将nums中对应的值和num进行值传递。

解决方法

目前个人觉得最优的解决方法是,不使用for range的形式,直接用索引来取值。

结果如下


特别注意

需要注意的是,新旧两个切片数据指向的内存地址一样,所以改变其中一个切片数据,另一个也会随之变化。

0条评论
0 / 1000
****伟
4文章数
0粉丝数
****伟
4 文章 | 0 粉丝
原创

go语言 for range 循环进行append操作遇到的坑

2023-04-10 01:43:43
63
0

问题描述:

在某项目代码中,由于避免golang中的零值问题,在定义结构体时,将某字段的类型定义为了指针(*uint8),在后续操作中需要生成结构体切片返回,然后在for range中对slice进行append地址操作时,发现slice中的值全部一样且为for range中的最后一个。简化代码如下:

结果如下

 

总结原因

最终总结出原因是在for range语句中,创建了变量num且只被创建了一次。即num有自己的空间内存且地址在for循环过程中不变,循环过程中每次将nums中对应的值和num进行值传递。

解决方法

目前个人觉得最优的解决方法是,不使用for range的形式,直接用索引来取值。

结果如下


特别注意

需要注意的是,新旧两个切片数据指向的内存地址一样,所以改变其中一个切片数据,另一个也会随之变化。

文章来自个人专栏
golang开发
1 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0