Goにおける`make`とMapの初期化の理解(`make map`と同様)
Ethan Miller
Product Engineer · Leapcell

Key Takeaways
make
関数はマップを初期化し、メモリを割り当て、すぐに使用できるようにします。new
はnilマップへのポインタを返し、使用前に追加の初期化が必要です。- マップリテラルは、定義済みのキーと値のペアを使用してマップを宣言および初期化するための簡潔な方法を提供します。
Goでは、マップは順序付けられていないキーと値のペアを格納する重要なデータ構造であり、キーを使用して効率的なデータ検索を可能にします。マップの適切な初期化は、ランタイムエラーを回避し、最適なパフォーマンスを確保するために重要です。この記事では、マップの初期化におけるmake
関数の役割を掘り下げ、Goでマップを作成する他の方法と比較します。
マップの初期化におけるmake
の役割
Goのmake
関数は、スライス、マップ、およびチャネルを初期化し、メモリを割り当てるために特別に設計された組み込み関数です。マップに関して言えば、make
は必要なメモリを割り当てるだけでなく、マップが使用できる状態にすることを確認します。make
を使用してマップを作成する方法は次のとおりです。
dict := make(map[string]int)
この例では、dict
はstring
型のキーとint
型の値を持つマップです。make
関数はマップを初期化し、すぐにキーと値のペアを追加できます。
dict["Alice"] = 30
適切に初期化されていないマップに要素を追加しようとすると、ランタイムパニックが発生します。したがって、make
を使用することは、マップが操作の準備ができていることを保証するための標準的かつ推奨されるアプローチです。
make
と他のマップ作成方法との比較
make
はマップを初期化するための従来の方法ですが、Goはマップを宣言する他の方法を提供しており、それぞれにニュアンスがあります。
マップリテラルの使用
マップリテラルを使用すると、マップの宣言と初期化を簡潔な方法で行うことができます。このアプローチは、宣言時に初期キーと値のペアがわかっている場合に特に役立ちます。
dict := map[string]int{ "Alice": 30, "Bob": 25, }
この構文は、マップを宣言するだけでなく、指定されたキーと値のペアで初期化もします。マップは、この宣言後すぐに使用できます。
new
関数の使用
Goのnew
関数は、メモリを割り当て、指定された型のゼロ値へのポインタを返します。マップで使用すると、すぐに使用できないnilマップへのポインタを返します。
dictPtr := new(map[string]int)
ここで、dictPtr
はnilマップへのポインタです。このマップを使用するには、最初にmake
を使用して初期化する必要があります。
*dictPtr = make(map[string]int) (*dictPtr)["Alice"] = 30
または、完全に初期化されたマップに割り当てることもできます。
initializedMap := make(map[string]int) *dictPtr = initializedMap
new
だけを使用しても、マップに必要な基になるデータ構造が割り当てられないため、適切に初期化されるまでキーと値のペアを格納できないnilマップになることに注意することが重要です。
make
とnew
の主な違い
-
初期化:
make
はマップを初期化してメモリを割り当て、すぐに使用できるようにします。対照的に、new
はマップポインタのメモリを割り当てますが、基になるマップを初期化しないため、マップを使用可能にするには追加の手順が必要です。 -
戻り値の型:
make
は初期化されたマップを返し、new
はnilマップへのポインタを返します。
結論
make
、new
、およびマップリテラルの違いを理解することは、Goでの効果的なマップ初期化に不可欠です。make
関数は、マップ、スライス、およびチャネルを初期化するために調整されており、すぐに使用できる状態にすることを保証します。new
はマップポインタのメモリを割り当てることができますが、マップ自体を初期化しないため、マップを利用する前にさらに手順が必要になります。マップリテラルは、既知のキーと値のペアを使用してマップを宣言および初期化するための簡潔な方法を提供します。適切な初期化方法を選択することで、より堅牢でエラーのないGoプログラムを作成できます。
FAQs
make
はすぐに使用できるようにマップを初期化しますが、new
はポインタのメモリを割り当てるだけで、マップは初期化されていません。
宣言時に初期キーと値のペアがわかっている場合は、マップリテラルを使用して、簡潔で読みやすいコードを作成します。
nilマップにキーと値のペアを割り当てようとすると、ランタイムパニックが発生し、make
またはマップリテラルを使用した適切な初期化が必要になります。
Leapcellは、Goプロジェクトをホストするための最適な選択肢です。
Leapcellは、Webホスティング、非同期タスク、およびRedis向けの次世代サーバーレスプラットフォームです。
多言語サポート
- Node.js、Python、Go、またはRustで開発します。
無制限のプロジェクトを無料でデプロイ
- 使用量に対してのみ支払います - リクエストも料金もありません。
比類のない費用対効果
- アイドル料金なしの従量課金制。
- 例:25ドルで、平均応答時間60ミリ秒で694万リクエストをサポートします。
合理化された開発者エクスペリエンス
- 簡単なセットアップのための直感的なUI。
- 完全に自動化されたCI / CDパイプラインとGitOps統合。
- 実用的な洞察のためのリアルタイムのメトリックとロギング。
簡単なスケーラビリティと高いパフォーマンス
- 高い同時実行性を容易に処理するための自動スケーリング。
- 運用上のオーバーヘッドはゼロ - 構築に集中するだけです。
詳細については、ドキュメントをご覧ください。
Xでフォローしてください:@LeapcellHQ