【发布时间】:2017-06-11 17:34:08
【问题描述】:
在第一种情况中,我将映射按值传递给: 主包
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]
我的期望如下:
- 当按值传递时映射不静音
- 当通过参考地图传递时像 second 情况一样静音。 然而,在 first 情况下,地图被静音,但顺序相反(与 second 情况相比)。
为什么会这样?
【问题讨论】:
-
Go 没有“按引用传递”的概念,因此您的问题毫无意义。停止将指针视为“通过引用传递”。不是。
标签: function go parameter-passing mutability