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 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 サイトの他の関連記事を参照してください。