Maison >développement back-end >Golang >La carte Golang nécessite-t-elle d'être créée ?

La carte Golang nécessite-t-elle d'être créée ?

(*-*)浩
(*-*)浩original
2019-12-17 10:04:179139parcourir

La carte Golang nécessite-t-elle d'être créée ?

map

Semblable aux tables de hachage ou aux dictionnaires dans d'autres langues, les données sont stockées sous forme de valeur-clé​​​​ ​​​​​​​​go)

la clé doit être d'un type qui prend en charge les opérations de comparaison == ou !=, et ne peut pas être une fonction, une carte ou une tranche

La carte recherche une valeur par clé que par recherche linéaire Beaucoup plus rapide

La carte est créée à l'aide de make() et prend en charge l'abréviation :=

make([keyType] valueType,cap), cap représente la capacité et peut être omis

Il s'agrandira automatiquement lorsque la capacité est dépassée, mais essayez de fournir une valeur initiale raisonnable

Utilisez len() pour obtenir le nombre d'éléments

Ajoutez automatiquement la paire clé-valeur lorsqu'elle n'existe pas. Utilisez delete() pour supprimer une paire clé-valeur

Utilisez for range pour itérer la carte et la tranche

La déclaration et la valeur par défaut de map

// 声明
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 Lorsqu'elle est déclarée, la valeur par défaut est nulle. Lorsque la valeur est prise à ce moment, la valeur zéro du type correspondant est renvoyée. (une valeur nulle est renvoyée si elle n'existe pas)

// 先声明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)

initialisation du type de données cartographique :

Deux façons : map[string]string{} ou make(map[ string]string)

La carte non initialisée est nulle :

Une carte non initialisée est nulle, ce qui équivaut fondamentalement à une carte vide, sauf qu'une carte nulle ne permet pas en y ajoutant des valeurs. (Une carte nulle est équivalente à une carte vide sauf qu'aucun élément ne peut être ajouté)

Ainsi, lorsque la carte est nulle, une erreur ne sera pas signalée lors de l'obtention de la valeur (elle ne peut pas être obtenue), mais une erreur sera signalée lorsque la valeur sera ajoutée.

En fait, il y a une autre différence, supprimer une carte nulle va paniquer, mais supprimer une carte vide est une opération sans issue (et ne paniquera pas) (cette différence n'est plus dans les derniers conseils Go, c'est-à-dire : supprimer Une carte nulle ne paniquera pas)

Lors de l'impression d'une carte via fmt, les résultats d'une carte vide et d'une carte nulle sont les mêmes :

Lors de l'impression d'une carte via fmt , carte vide Le résultat est le même que nil map, les deux sont map[]. Par conséquent, ne jugez pas si la carte est vide ou nulle pour le moment, mais jugez-la par map == nil.

C'est le cas du champ Form dans Request. Lorsque ParseForm() n'est pas appelé directement ou indirectement, Form est en fait nul. Cependant, si vous l'imprimez, c'est map[], ce qui peut l'être. un peu déroutant. En retraçant le code source, nous pouvons constater que le formulaire n'est pas du tout initialisé.

Dans la méthode FormValue(), il sera jugé si le formulaire est nul, puis décidera d'appeler ou non la méthode ParseForm(). Bien sûr, vous pouvez également appeler manuellement la méthode ParseForm()

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn