В первом случае я передаю карту по значению: package main
import (
"fmt"
"time"
)
func timeMap(z map[string]interface{}) {
z["updated_at"] = time.Now()
}
func main() {
foo := map[string]interface{}{
"Matt": 42,
}
timeMap(foo)
fmt.Println(foo)
}
На выходе получается приглушенная карта:
map[updated_at:2009-11-10 23:00:00 +0000 UTC Matt:42]
Во втором случае код почти идентичен, но для передачи по ссылке:
package main
import (
"fmt"
"time"
)
func timeMap(z *map[string]interface{}) {
(*z)["updated_at"] = time.Now()
}
func main() {
foo := map[string]interface{}{
"Matt": 42,
}
timeMap(&foo)
fmt.Println(foo)
}
Очевидно, что результат отличается:
map[Matt:42 updated_at:2009-11-10 23:00:00 +0000 UTC]
Мои ожидания были следующие:
- при передаче по значению карта не приглушается
- При переходе по ссылке карта приглушается, как и во втором случае. Однако в первом случае карта была приглушена, но в обратном порядке (по сравнению со вторым случаем).
Почему так происходит?