为了账号安全,请及时绑定邮箱和手机立即绑定

我可以使用 defer 删除地图的元素吗?

我可以使用 defer 删除地图的元素吗?

Go
蛊毒传说 2022-06-27 10:05:25
type Tasks map[int]CustomValuefunc (t *Tasks) Put(task MyTask) {    (*t)[len(*t)] = task    return len(*t) - 1}func (t *Tasks) Get(taskID int) interface{} {    defer func() {         // Is this OK???        delete(*t, taskID)    }()    return (*t)[jobID].GetValue()}这是我的 Go 代码。基本上,我使用地图来存储一些“键值”。我有两个功能Put和Get.获取值后,我想从地图中删除元素。我可以简单地使用延迟机制来做到这一点吗?我不知道返回后是否必须调用 defer 函数。
查看完整描述

1 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

是的,defer可用于从地图中删除元素,就像您打算使用它一样。

规范:延迟语句:

...如果周围函数通过显式return 语句返回,则在该 return 语句设置任何结果参数之后但函数返回其调用者之前执行延迟函数。

所以(*t)[jobID].GetValue()将在延迟函数中的删除发生之前进行评估。

但是请注意,映射是引擎盖下的指针(有关详细信息,请参阅为什么切片值有时会过时但从不映射值?),因此您应该使用非指针接收器。这也大大简化了您的代码,并使其更有效率。


查看完整回答
反对 回复 2022-06-27
  • 1 回答
  • 0 关注
  • 86 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号