golang中为什么当map的value为结构体时无法修改成员变量
在Golang中,当map的value为结构体时,可以修改结构体的成员变量。但是需要注意的是,如果直接从map中获取结构体的value并修改成员变量,会出现无法修改的情况。
这是因为在Golang中,map的value是一个副本,而不是原始值的引用。当从map中获取一个结构体的value时,实际上是获取了该结构体的副本。对这个副本进行的修改不会影响原始的结构体。
要修改map中value结构体的成员变量,可以先获取结构体的指针,然后通过指针来修改成员变量。示例如下:
package main
import "fmt"
type Person struct {
Name string
Age int
}
func main() {
people := make(map[string]Person)
people["John"] = Person{Name: "John", Age: 30}
// 获取结构体的指针
p := &people["John"]
// 修改结构体的成员变量
p.Age = 40
fmt.Println(people["John"]) // 输出: {John 40}
}
在上面的示例中,先获取了结构体的指针p := &people["John"],然后通过指针p来修改结构体的成员变量p.Age = 40。这样就能成功修改map中value结构体的成员变量
原文地址: https://www.cveoy.top/t/topic/ieru 著作权归作者所有。请勿转载和采集!