在Go语言中,哈希表(也称为映射,Map)中存储的是键值对,其中键用于快速查找值。当哈希表的值是结构体时,通过哈希表直接修改值内变量的值是不允许的。\n\n这是因为哈希表中存储的是值的副本,而不是值本身的引用。当我们通过哈希表获取一个值时,实际上是获取了该值的副本。如果我们尝试修改这个副本的某个字段,那么只会修改副本的字段,而不会影响到哈希表中原始值的字段。\n\n如果想要修改哈希表中结构体的字段,我们需要先获取该结构体的副本,然后修改副本的字段,最后再将修改后的副本存回哈希表中。可以通过以下方式实现:\n\ngo\npackage main\n\nimport "fmt"\n\ntype Person struct {\n Name string\n Age int\n}\n\nfunc main() {\n people := make(map[string]Person)\n\n // 添加数据\n people["John"] = Person{Name: "John", Age: 30}\n\n // 获取副本并修改字段\n p := people["John"]\n p.Age = 40\n\n // 将修改后的副本存回哈希表中\n people["John"] = p\n\n fmt.Println(people["John"]) // 输出: {John 40}\n}\n\n\n在上面的示例中,我们首先将Person结构体的副本存入哈希表中。然后,我们获取哈希表中的副本,并修改副本的Age字段。最后,我们将修改后的副本存回哈希表中。\n\n需要注意的是,如果哈希表中不存在指定键的值,那么将会返回该值类型的零值。因此,在修改哈希表中结构体的字段之前,需要先判断该键是否存在。

Golang哈希表:修改结构体值 - 详解与示例

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

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