请问golang中函数间传递大MAP是否是值拷贝呢?

小弟在学习golang开发点小工具,其中有一个场景是需要传递map[string][]string类型的数据,每次的话大概要存5W条数据在map中,并传递给其他函数处理,这样做的话,是否会大量消耗内存呢?但是貌似map无法通过传递指针的方式来传递值?请问各位遇到这种情况有什么好的建议呢?谢谢大家

阅读 9.3k
3 个回答

类似于map、slice都是引用传递,没有值拷贝一说。

package main

import "fmt"

func main() {
    var pointerMap map[string]int = map[string]int{
        "a" : 1,
    }
    pointerB := pointerMap
    pointerB["a"] = 2;
    fmt.Printf("%v", pointerMap)
}
新手上路,请多包涵

还是值传递,只不过传递的“值”是一个1个字长的地址

[https://play.golang.org/p/ozH...]

package main

import (

f "fmt"

)

func alter_map(a map[int]int){

a[1] = 2
f.Printf("%p\n", &a) //!!!!!!!!!!!!!1
f.Printf("%p\n", a)//查看修改【后】的map的内存地址

}

func main() {

a := make(map[int]int, 2)
a[2] =1
f.Printf("%p\n", &a) //!!!!!!!!!!!!!!
f.Printf("%p\n", a) //查看修改【前】的map的内存地址
alter_map(a) //修改map

f.Println(a)

}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题