Lors du passage d'une carte à une fonction dans Go, une copie sera créée par défaut et les modifications apportées à la copie n'affecteront pas la carte d'origine. Si vous devez modifier la carte originale, vous pouvez la passer via un pointeur. Les cartes vides doivent être manipulées avec précaution car ce sont techniquement des pointeurs nuls, et passer une carte vide à une fonction qui attend une carte non vide provoquera une erreur.
Choses à noter lorsque la fonction Go reçoit des paramètres de carte
Dans Go, lors du passage de la carte à la fonction en tant que paramètre, il y a certaines précautions. Si on n'y prête pas attention, cela peut conduire à des résultats inattendus.
Copy Passing
Lors du passage d'une carte à une fonction, une copie est créée par défaut. En d’autres termes, la carte au sein de la fonction est une copie de la carte des paramètres, et toute modification apportée à la copie n’affectera pas la carte d’origine.
Cas pratique 1 :
func modifyMap(m map[string]int) { m["key"] = 100 } func main() { m := make(map[string]int) modifyMap(m) fmt.Println(m) // 输出:{} }
Comme le montre l'exemple, les modifications apportées à la carte par la fonction modifyMap
n'affecteront pas la carte originale. modifyMap
函数对 map 做出的修改不会影响原始 map。
避免副本传递
如果需要修改原始 map,可以使用指针来传递。当传递指针时,函数内的 map 指向原始 map 的内存地址。
实战案例 2:
func modifyMap(m *map[string]int) { (*m)["key"] = 100 } func main() { m := make(map[string]int) modifyMap(&m) fmt.Println(m) // 输出:{key: 100} }
如示例所示,modifyMap
Éviter le passage de copie
Si vous devez modifier la carte originale, vous pouvez utiliser un pointeur pour la transmettre. Lorsqu'un pointeur lui est transmis, la carte dans la fonction pointe vers l'adresse mémoire de la carte d'origine.Cas pratique 2 :
func printMap(m map[string]int) { for k, v := range m { fmt.Println(k, v) } } func main() { var m map[string]int // 空 map printMap(m) // 运行时错误:panic: runtime error: invalid memory address or nil pointer dereference }
modifyMap
affecteront la carte originale.
Carte vide
Soyez prudent lorsque vous passez une carte vide à une fonction. Une carte vide est techniquement un pointeur nul, pas une carte valide. Par conséquent, si une fonction attend une carte non vide, une erreur peut se produire lors du passage d'une carte vide.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!