Os mapas são passados por valor ou referência no Go?
Sempre é possível definir uma função como a seguir, mas isso é um exagero?
func foo(dat *map[string]interface{}) {...}
Mesma pergunta para o valor de retorno. Devo retornar um ponteiro para o mapa ou retornar o mapa como valor?
A intenção é evitar a cópia desnecessária de dados.
*map
em alguns casos, se precisar reatribuir o valor do mapa em um endereço)Respostas:
Neste tópico você encontrará sua resposta:
Golang: Acessando um mapa usando sua referência
fonte
Aqui estão algumas partes de Se um mapa não é uma variável de referência, o que é? por Dave Cheney:
e conclusão:
E um pouco interessante sobre a história / explicação da
map
sintaxe:fonte
Não. Os mapas são referência por padrão.
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 // ----------------------- }
Do Golang Blog-
// Ex of make function m = make(map[string]int)
Link do snippet de código Brinque com ele.
fonte