GOのマップは、キー価値ペアを保存できる組み込みの連想データ型です。それらはハッシュテーブルとして実装されており、それらに保存されている値に効率的にアクセスできます。マップは順序付けられていません。つまり、プログラムの実行中にキーと値の順序が変化する可能性があります。
GOでマップを作成するには、 map
キーワードでmake
関数を使用します。マップを宣言するための構文は次のとおりです。
<code class="go">myMap := make(map[keyType]valueType)</code>
ここで、 keyType
はキーのタイプであり、 valueType
は値のタイプです。たとえば、整数への文字列のマップを作成するには:
<code class="go">ages := make(map[string]int)</code>
また、複合リテラルを使用して、宣言時に値でマップを初期化することもできます。
<code class="go">ages := map[string]int{ "Alice": 30, "Bob": 25, }</code>
キー値ペアをマップに追加するには、次の構文を使用します。
<code class="go">ages["Charlie"] = 35</code>
マップから値を取得するには、キーを使用します。
<code class="go">age := ages["Alice"]</code>
マップに存在しないキーの値を取得しようとすると、値タイプのゼロ値が得られます。その値にアクセスする前にキーが存在するかどうかを確認するには、マルチ値割り当てを使用できます。
<code class="go">age, exists := ages["David"] if !exists { fmt.Println("David is not in the map") }</code>
マップからキー値ペアを削除するには、 delete
関数を使用します。
<code class="go">delete(ages, "Bob")</code>
GOプログラミングでマップを使用すると、いくつかの重要な利点が得られます。
len
などのマップを操作するための組み込み関数と方法を提供し、 delete
エントリを削除します。 GOのマップを効率的に反復するには、 for
ループのrange
キーワードを使用できます。 range
キーワードを使用すると、マップ内の各エントリのキーと値の両方にアクセスできます。これが例です:
<code class="go">ages := map[string]int{ "Alice": 30, "Bob": 25, "Charlie": 35, } for key, value := range ages { fmt.Printf("Name: %s, Age: %d\n", key, value) }</code>
これにより、マップ内のすべてのキー価値ペアを反復し、各名前と年齢を印刷します。マップは本質的に順序付けられていないため、キー価値のペアが訪問される順序は保証されていないことに注意してください。
キーを繰り返す必要がある場合は、次の構文を使用できます。
<code class="go">for key := range ages { fmt.Printf("Name: %s\n", key) }</code>
値のみを反復する必要がある場合は、キーに空白の識別子_
を使用できます。
<code class="go">for _, value := range ages { fmt.Printf("Age: %d\n", value) }</code>
GOでマップを使用する場合、避けるべきいくつかの一般的な間違いがあります。
キーの存在をチェックしない:マップから値を取得するとき、キーが存在するかどうかを確認するのを忘れがちです。そうしないと、コードで予期しないゼロ値が使用される可能性があります。
<code class="go">// Incorrect age := ages["David"] // If "David" doesn't exist, age will be 0 // Correct age, exists := ages["David"] if !exists { fmt.Println("David is not in the map") }</code>
同時書き込み:適切な同期なしに複数のゴルチンからマップに書き込むことは、人種の状態と未定義の動作につながる可能性があります。
<code class="go">// Incorrect go func() { ages["Eve"] = 40 }() go func() { ages["Frank"] = 45 }() // Correct var mutex sync.Mutex go func() { mutex.Lock() ages["Eve"] = 40 mutex.Unlock() }() go func() { mutex.Lock() ages["Frank"] = 45 mutex.Unlock() }()</code>
競合性のないタイプをキーとして使用する:マップはキーを同等にする必要があるため、スライスやマップなどの非比類なきタイプをキーとして使用すると、コンパイルエラーが発生します。
<code class="go">// Incorrect invalidMap := make(map[[]int]int) // Will not compile // Correct validMap := make(map[string]int)</code>
マップの初期化を見下ろす:適切な初期化なしでマップを使用しようとすると、ランタイムパニックが発生します。
<code class="go">// Incorrect var ages map[string]int ages["Alice"] = 30 // This will panic // Correct ages := make(map[string]int) ages["Alice"] = 30</code>
これらの一般的な間違いを避けることにより、GOプログラムでマップを効果的かつ安全に使用できます。
以上がGOのマップは何ですか?それらをどのように作成して使用しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。