ホームページ > バックエンド開発 > Golang > golang マップには make が必要ですか?

golang マップには make が必要ですか?

(*-*)浩
リリース: 2019-12-17 10:04:17
オリジナル
9245 人が閲覧しました

golang マップには make が必要ですか?

map

他の言語のハッシュ テーブルや辞書と同様に、キーと値の形式でデータを保存します。

go)

key は == または != 比較演算をサポートする型である必要があり、関数、マップ、またはスライスにすることはできません

マップはキーを使用して値を検索します。線形検索よりもはるかに高速です

マップは make() を使用して作成され、:=

make([keyType]valueType,cap) の省略形をサポートします。cap は容量を表し、省略できます

容量を超えると自動的に拡張されますが、適切な初期値を指定するようにしてください。

要素数を取得するには len() を使用してください。

キーと値のペアは、キーと値のペアを削除するには、delete() を使用します。

マップとスライスを反復するために範囲に使用します

マップの宣言とデフォルト値

// 声明
var m map[string]string
 
// bool 的零值是false
var m map[int]bool 
a, ok := m[1]
fmt.Println(a, ok) // false  false
 
// int 的零值是0
var m map[int]int 
a, ok := m[1]
fmt.Println(a, ok) // 0  false
ログイン後にコピー

map 宣言時のデフォルト値はnilですが、このとき値を取得し、対応する型のゼロ値を返します(存在しない場合はゼロ値を返します)

// 先声明map
var m1 map[string]string
// 再使用make函数创建一个非nil的map,nil map不能赋值
m1 = make(map[string]string)
// 最后给已声明的map赋值
m1["a"] = "aa"
m1["b"] = "bb"
 
// 直接创建
m2 := make(map[string]string)
// 然后赋值
m2["a"] = "aa"
m2["b"] = "bb"
 
// 初始化 + 赋值一体化
m3 := map[string]string{
    "a": "aa",
    "b": "bb",
}
 
// ==========================================
// 查找键值是否存在
if v, ok := m1["a"]; ok {
    fmt.Println(v)
} else {
    fmt.Println("Key Not Found")
}
 
// 遍历map
for k, v := range m1 {
    fmt.Println(k, v)
}
 
m := make(map[interface{} ]interface{})
m[1] = 56
m["str"] = "dfsdf"
fmt.Println(m)
ログイン後にコピー

マップ データ型の初期化:

2 つの方法: map[string]string{} または make(map[string]string)

#初期化されていないマップは nil です:

初期化されていないマップは nil です。これは基本的に空のマップと同等ですが、nil マップでは値を追加できない点が異なります。 (nil マップは、要素を追加できないことを除いて、空のマップと同等です)

したがって、マップが nil の場合、値を取得するときにエラーは報告されません (取得できません)。ただし、値を追加するとエラーが報告されます。

実は、もう 1 つの違いがあります。nil マップを削除するとパニックになりますが、空のマップを削除すると何も操作されません (パニックになりません) (この違いは最新の Go ヒントには含まれていません。 : delete nil マップはパニックしません)

fmt を介してマップを印刷する場合、空のマップと nil マップの結果は同じです:

fmt を介してマップを印刷する場合, 空のマップ 結果は nil マップと同じで、どちらも map[] です。したがって、この時点ではmapが空かnilかを判定せず、map == nilで判定します。

Request の Form フィールドは次のようになります。ParseForm() が直接または間接的に呼び出されない場合、Form は実際には nil です。ただし、これを println で出力すると、map[] となります。混乱する。ソース コードを追跡すると、フォームがまったく初期化されていないことがわかります。

FormValue()メソッドでは、Formがnilかどうかを判定して、ParseForm()メソッドを呼び出すかどうかを決定します。もちろん、手動でParseForm()メソッドを呼び出すこともできます

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

関連ラベル:
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート