Go のエラー「致命的エラー: マップ読み取りとマップ書き込みの同時実行」は、複数のゴルーチンが発生した場合に発生します。読み取りと書き込みの両方で同時にマップにアクセスしてみてください。これは、ある goroutine がマップから読み取ろうとしているときに、別の goroutine が同時に書き込みを行っているときに発生する可能性があります。マップへのアクセスを制御する sync.RWMutex。このオプションは、単一の読み取りと書き込みを行うシナリオ (マップのループではない) に適しています。
syncmap.Map
代替方法は、syncmap を使用することです。 .Map{}。Go の同時マップ タイプです。内部的に競合状態を処理するため、通常のマップよりも速度が遅くなります。ただし、for ループ シナリオでは優れています。var someMap = map[string]string{} var someMapMutex = sync.RWMutex{} go func() { someMapMutex.Lock() someMap["key"] = "value" someMapMutex.Unlock() }() someMapMutex.RLock() v, ok := someMap["key"] someMapMutex.RUnlock() if !ok { fmt.Println("key missing") return } fmt.Println(v)
このエラーを防ぐには、-race オプションを使用してサーバーをテストし、潜在的な競合状態を特定して排除することをお勧めします。 .
これらのソリューションを実装し、これらのガイドラインに従うことで、「マップ読み取りとマップ書き込みの同時実行」エラーを回避し、 Go コード内の共有データへのスレッドセーフなアクセス。
以上がGo で「致命的エラー: マップ読み取りとマップ書き込みの同時実行」を解決する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。