如何解决我可以使用defer删除地图元素吗?
type Tasks map[int]CustomValue
func (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函数。
解决方法
是的,defer
可能会像您打算使用的那样从地图中删除。
...如果周围的函数通过显式的return statement返回,则延迟的函数在之后执行,该结果参数由该return语句设置,但之前该函数返回其调用者。
因此(*t)[jobID].GetValue()
将在延迟函数中的删除发生之前进行评估。
但是请注意,映射是内部的指针(有关详细信息,请参见why slice values can sometimes go stale but never map values?),因此您应该使用非指针接收器。这也大大简化了您的代码,并使代码效率更高。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。