我有这样一个哈希:在需要的时间是否删除保证从golang中的哈希中删除?
timeKey := fmt.Sprintf("%v",time.Now().UnixNano())
TransfersInFlight[timeKey] = filename
total, err := sendTheFile(filename)
delete(TransfersInFlight, timeKey)
即:
var TransfersInFlight map[string]string = make(map[string]string)
而且之前我发送一个文件我做一个键就存储,发送和删除它发送文件,散列中有一个关键字,指向文件名的时间戳。
的FUNC sendTheFile
往往不是作品,或有犯错,但从来没有抛出一个异常堆栈异常和崩溃的整个程序太行:
delete(TransfersInFlight, timeKey)
应该叫做时间的100%。然而,我有时会发现这样的情况,就像这条线从未被调用过,并且文件永远卡在TransfersInFlight中。这怎么可能?
您是否同时访问多个地方的地图?用赛跑探测器运行你的代码。 – JimB
哦,我只需要一个互斥锁?我认为golang有这样的哈希原子操作。 –
我不确定你的意思,但Go中的_no_值对于并发读写是安全的。唯一的“原子”操作是通过“sync/atomic”包。 – JimB