Maison  >  Article  >  développement back-end  >  Choses à noter lorsque les fonctions Golang reçoivent des paramètres de carte

Choses à noter lorsque les fonctions Golang reçoivent des paramètres de carte

WBOY
WBOYoriginal
2024-06-04 10:31:14352parcourir

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.

Golang 函数接收 map 参数时的注意事项

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
}

Comme le montre l'exemple, les modifications apportées à la carte par la fonction 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.
  • Cas pratique 3 :
  • rrreee
  • Comme le montre l'exemple, passer une map vide à la fonction provoquera une erreur d'exécution. Pour résoudre ce problème, vous pouvez effectuer une vérification non nulle sur la carte, ou fournir une valeur par défaut.
🎜Conclusion : 🎜🎜🎜🎜Lors du passage d'une carte à une fonction, une copie est créée par défaut. 🎜🎜Pour modifier la carte originale, vous pouvez la passer à l'aide d'un pointeur. 🎜🎜Soyez prudent avec les cartes vides. 🎜🎜

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