值接收器和指针接收器的问题

来源:4-1 结构体和方法

三生三途

2020-08-11

type MyMap map[string]string

func (mp MyMap) Add(key, value string) {
	mp[key] = value
}

func main() {
	var mp = make(MyMap)
	mp.Add("key", "value")
	fmt.Println(mp) // map[key:value]
}

值传递为什么能改变外面map的值呢

写回答

1回答

ifcalm

2020-08-15

map创建的时候,字面值mp(文中创建map的变量)其实本身就是对底层数据的一个引用,这个引用生成的无数个副本的指向也都是同一份底层数据, 所以在函数中会让人产生引用传递的错觉.
而这里所谓的“引用”应该就是那个“标头值”,而标头值就是“包含一个指向底层数据结构的指针”.

0
1
三生三途
所以为map创建方法时,使用值接收器和指针接收器都无所谓了吗,可以这么理解吗
2020-08-17
共1条回复

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程