В Go карты передаются по значению или по ссылке?
Всегда можно определить функцию следующим образом, но разве это излишество?
func foo(dat *map[string]interface{}) {...}
Тот же вопрос для возвращаемого значения. Должен ли я вернуть указатель на карту или вернуть карту как значение?
Конечно, цель состоит в том, чтобы избежать ненужного копирования данных.
*map
в некоторых случаях вам может понадобиться a , если вам нужно переназначить значение карты по адресу)Ответы:
В этой теме вы найдете свой ответ:
Голанг: доступ к карте по ссылке
источник
Вот некоторые части из статьи Если карта не является ссылочной переменной, что это такое? Дэйв Чейни:
и вывод:
И кое-что интересное об истории / объяснении
map
синтаксиса:источник
Нет. Карты по умолчанию являются справочными.
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 // ----------------------- }
Из блога Golang-
// Ex of make function m = make(map[string]int)
Ссылка на фрагмент кода Поиграйте с этим.
источник