私はこのようなハッシュがあります:それはするのにかかる時間の間には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
常にどちらかの作品、またはERRを持っていますが、スタックトレース例外をスローしないとラインので、プログラム全体をクラッシュしない:
delete(TransfersInFlight, timeKey)
は時間の100%を呼び出さなければなりません。それでも、この行が呼び出されず、TransfersInFlightにファイルが永遠に残っているような場合があります。これはどのように可能ですか?
マップに複数の場所で同時にアクセスしていますか?レースディテクタでコードを実行します。 – JimB
ああ、私はミューテックスが必要ですか?私はgolangがそれのようにハッシュに原子操作を持っていると思った。 –
私はあなたが何を意味しているのかはわかりませんが、Goの_no_値は並行読み書きには安全です。唯一の「アトミック」操作は、「同期/アトミック」パッケージです。 – JimB