英文:
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)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论