在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结构体的成员变量

golang中为什么当map的value为结构体时无法修改成员变量

原文地址: https://www.cveoy.top/t/topic/ieru 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录