小编Oma*_*yam的帖子

传递值时与通过引用传递时地图的奇怪突变(Golang)

第一种情况下,我按值传递一个映射: 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)
}
Run Code Online (Sandbox Code Playgroud)

输出是一个静音地图:

map[updated_at:2009-11-10 23:00:00 +0000 UTC Matt:42]
Run Code Online (Sandbox Code Playgroud)

第二种情况下,代码几乎相同,但通过引用传递:

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)
}
Run Code Online (Sandbox Code Playgroud)

显然,结果不同:

map[Matt:42 updated_at:2009-11-10 23:00:00 +0000 UTC]
Run Code Online (Sandbox Code Playgroud)

我的期望如下:

  • 当传递值时映射不会静音
  • 当经过参考地图时,像第二种情况一样被静音。然而,在第一种 …

function parameter-passing go mutability

0
推荐指数
1
解决办法
1415
查看次数

标签 统计

function ×1

go ×1

mutability ×1

parameter-passing ×1