Les cartes sont-elles transmises par valeur ou référence dans Go?
Il est toujours possible de définir une fonction comme suit, mais est-ce exagéré?
func foo(dat *map[string]interface{}) {...}
Même question pour la valeur de retour. Dois-je renvoyer un pointeur vers la carte ou renvoyer la carte comme valeur?
L'intention est bien entendu d'éviter la copie inutile de données.
*map
dans certains cas, si vous devez réaffecter la valeur de la carte à une adresse)Réponses:
Dans ce fil, vous trouverez votre réponse:
Golang: accéder à une carte en utilisant sa référence
la source
Voici quelques parties de Si une carte n'est pas une variable de référence, qu'est-ce que c'est? par Dave Cheney:
et conclusion:
Et un peu intéressant sur l'histoire / l'explication de la
map
syntaxe:la source
Non. Les cartes sont des références par défaut.
package main import "fmt" func mapToAnotherFunction(m map[string]int) { m["hello"] = 3 m["world"] = 4 m["new_word"] = 5 } // func mapToAnotherFunctionAsRef(m *map[string]int) { // m["hello"] = 30 // m["world"] = 40 // m["2ndFunction"] = 5 // } func main() { m := make(map[string]int) m["hello"] = 1 m["world"] = 2 // Initial State for key, val := range m { fmt.Println(key, "=>", val) } fmt.Println("-----------------------") mapToAnotherFunction(m) // After Passing to the function as a pointer for key, val := range m { fmt.Println(key, "=>", val) } // Try Un Commenting This Line fmt.Println("-----------------------") // mapToAnotherFunctionAsRef(&m) // // After Passing to the function as a pointer // for key, val := range m { // fmt.Println(key, "=>", val) // } // Outputs // hello => 1 // world => 2 // ----------------------- // hello => 3 // world => 4 // new_word => 5 // ----------------------- }
Du blog Golang-
// Ex of make function m = make(map[string]int)
Code Snippet Link Jouez avec.
la source