我有這樣一個哈希:在需要的時間是否刪除保證從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