在 Go 中直接修改结构体映射中的字段
在 Go 中,int 到 struct 的映射允许您访问结构体值通过使用密钥。然而,直接修改结构体值中的字段可能会导致意外的行为。
间接的原因
当你从映射中访问结构体值时,你实际上是访问结构体的副本。修改此副本不会修改映射中的原始结构。要更改原始结构体,您需要读取它,修改它,然后将其写回到映射中。
这是因为 Go 在分配给映射时将结构体值存储在单独的内存位置中。修改副本不会影响原始值。
隐含隐藏成本
修改切片或映射等其他数据结构中的结构体字段没有隐含隐藏成本。其行为与整数到结构的映射的情况相同,其中对结构副本的修改不会影响原始结构。
指针的使用
可以使用指针就地修改原始结构体值。通过在映射中存储指向结构体的指针而不是结构体本身,您可以直接访问和修改原始结构体的字段。
示例:
import "fmt" type dummy struct { a int } func main() { x := make(map[int]*dummy) x[1] = &dummy{a: 1} x[1].a = 2 fmt.Println(x[1].a) // Output: 2 }
在此示例中,我们使用指针访问结构体值,从而允许我们直接修改其字段。
以上是如何正确修改Go Map中的struct字段?的详细内容。更多信息请关注PHP中文网其他相关文章!