ホームページ  >  記事  >  バックエンド開発  >  なぜ golang マップは同時ではないのでしょうか?

なぜ golang マップは同時ではないのでしょうか?

(*-*)浩
(*-*)浩オリジナル
2019-12-14 11:40:593727ブラウズ

なぜ golang マップは同時ではないのでしょうか?

マップ データ型は多くの言語で使用されており、キーと値の形式のハッシュ テーブルであるため、キーと値を 1 つずつマッピングして高速に検索できます。追加、削除等の操作を行います。 Go 言語も例外ではなく、マップ データ構造タイプを提供します。

# (推奨学習: Go )

Golang、マップは参照型です。ポインターのスライスと同様に、nil を指します。次のコードで宣言された後。これは golang の公式ドキュメントにも説明されているので、宣言直後は絶対に使用しないでください。最初は次のような間違いを犯す可能性があります。これに書き込むと null ポインターへの参照になるため、問題が発生します。

#したがって、必ず make 関数を使用してメモリを割り当て、初期化する必要があります:

var m map[string]string
m["result"] = "result"

golang のマップは同時実行安全ではありません

マップをよく使うのですが、快適に使っているのですが、ある日突然通信量が増えて、知らないうちにプログラムがハングアップしてしまい、何が起こったのか分かりませんが、以前は問題なく使えていたのです。 したがって、アサーションのチェック、同時実行の安全性の考慮など、いくつかの良い習慣を最初に身に付ける必要があります。

地図は使いやすいですが、注意が必要です。おそらく多くの人は、Golang の組み込みマップが実際には同時実行安全ではないことをまだ知りません。

たぶん sync.Map を試してみることができます。

golang の sync.Map は同時実行安全です。実際、これは sync パッケージ内の golang のカスタム名です。マップ構造。構造プロトタイプは次のとおりです:

m := make(map[string]string)
m["result"] = "result"

以上がなぜ golang マップは同時ではないのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。