英文:
Go - map value doesn't update
问题
这里有一段示例代码(可在此处运行:http://play.golang.org/p/86_EBg5_95)
package main
import "fmt"
type X struct {
Y int
}
func main() {
m := make(map[int]X)
var x *X
if _, ok := m[0]; !ok {
z := X{}
m[0] = z
x = &z
}
x.Y = 10
fmt.Println(m[0].Y)
fmt.Println(x.Y)
}
基本上,我在这里漏掉了什么?m[0].Y
不应该也是 10
吗?
英文:
I have some sample code here (runnable here: http://play.golang.org/p/86_EBg5_95)
package main
import "fmt"
type X struct {
Y int
}
func main() {
m := make(map[int]X)
var x *X
if _, ok := m[0]; !ok {
z := X{}
m[0] = z
x = &z
}
x.Y = 10
fmt.Println(m[0].Y)
fmt.Println(x.Y)
}
Basically: what am I missing here? Shouldn't m[0].Y
be 10
as well?
答案1
得分: 3
x
指向z
,而m[0]
是z
的一个副本(它是map[int]X
而不是map[int]*X
),所以更新x.Y
不会更新m[0]
。
我不确定你想要做什么,但是这里的m
是一个包含指针的映射:
func main() {
m := make(map[int]*X)
var x *X
if _, ok := m[0]; !ok {
z := X{}
m[0] = &z
x = &z
}
x.Y = 10
fmt.Println(m[0].Y)
fmt.Println(x.Y)
}
请注意,这是一个Go语言的代码示例。
英文:
x
point to z
while m[0]
is a copy of z
(it's a map[int]X
and not a map[int]*X
), so updating x.Y
wont update m[0]
I'm not sure what you want to do, but here m
is a map containing pointers:
func main() {
m := make(map[int]*X)
var x *X
if _, ok := m[0]; !ok {
z := X{}
m[0] = &z
x = &z
}
x.Y = 10
fmt.Println(m[0].Y)
fmt.Println(x.Y)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论