golang语言-map作为函数参数传递

golang语言-map作为函数参数传递

func main(){
	m := make(map[int]int)
	m[1] = 1
	fmt.Printf("原始map的内存地址是:%p\n", m)
	modify(m)
	fmt.Println("map值被修改了,新值为:", m)
}
func modify(m interface{}){
	fmt.Printf("函数里接收到map的内存地址是:%p\n", m)
	p := m.(map[int]int)
	p[1] = 2
}

如上:
在main函数中,m是个指针变量,它保存的值是:0xc00009e030。
在modify函数中,m也是个指针变量,保存的值也是:0xc00009e030。

知识点1:
Go语言中所有的传参都是值传递(传值),都是一个副本,一个拷贝。且传参和赋值(=)的操作本质是一样的。

拷贝的内容分为 非引用类型 和 引用类型 两种类型

非引用类型:int、string、struct、array 这样就不能修改原内容数据。

引用类型:指针、map、slice、chan ,这样就可以修改原内容数据。

总结: 初始化map后,返回的是指针变量,在函数之间,传递的是map的地址。在函数修改map会在主程序中表现出来,说明map虽然值传递,但是最终指向都是引用类型。

知识点2:
interface{} 类型是没有方法的接口。由于没有 implements 关键字,所以所有类型都至少实现了 0 个方法,所以 所有类型都实现了空接口。这意味着,如果您编写一个函数以 interface{} 值作为参数,那么您可以为该函数提供任何值。例如:


func DoSomething(v interface{}) {
   // ...
}

总结:空接口 interface{} 类似 Java 中的 Object 类型。任何变量都可以赋值给interface{}类型的变量。interface{} 的值不是任意类型,而是 interface{} 类型,函数可以接受 interface{} 作为参数,但最好不要返回 interface{}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西京刀客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值