gpt4 book ai didi

go - "visible in the caller"是否表示调用变异函数的堆栈?

转载 作者:行者123 更新时间:2023-12-01 22:40:23 24 4
gpt4 key购买 nike

通读 Effective Go 文档,我有点难以理解以下语句的含义。

If you pass a map to a function that changes the contents of the map, the changes will be visible in the caller.

我理解这对引用/指针的更改意味着什么的要点将反射(reflect)在函数本身之外。我不明白的是“在调用者中可见”。不是 100% 这个词的意思。调用者是调用改变 map 的函数的堆栈吗?

最佳答案

Go map 是指向底层数据结构的指针,因此如果将 map 传递给函数,则将指针传递给该 map。这意味着调用者和被调用函数正在共享该数据结构的实例。对该结构所做的任何更改都可以被其他函数读取,因此它们是“可见的”。因此,如果您有:

func f(m map[string]string,ch chan struct{}) {
m["x"]="a"
ch<-struct{}
}

func g() {
m:=map[string]string{}
ch:=make(chan struct{})
go func() {
// Do stuff with m
<-ch
fmt.Println(m["x"])
}()
f(m,ch)

你有一个 goroutine 和 f同时使用同一张 map , f 所做的更改在 goroutine 中是“可见的”。

关于go - "visible in the caller"是否表示调用变异函数的堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61123581/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com