如果 golang map 值不能修改怎么办?
值对象与指针对象
假设有一个 map 对象 map[string]Person
, 其中 Person
定义如下。 是一个 struct
|
|
现在有一个需求, map 中的 Person 对象年龄为 0 , 则将其默认值设置为 18。
很显然, 由于 map[string]Person
中保存的是 值对象 ,因此通过任意方式获取的都是 值对象的副本 , 所有修改都是在副本上, 不能 修改真实值。
如果是 map[string]*Person
就很方便了。 *Person
是 指针对象 , 获取到的是 指针对象的副本, 而 指针副本 也指向了原始数据, 就 可以修改 真实值。
虽然不能被修改, 但是能被覆盖
然而, map 本身可以被 被认为 是一个指针对象。 因此可以通过 同名 key 赋值覆盖的方式, 实现 修改的效果。
|
|
这种虽然方式效率不高, 但是可行。
- 原文链接:https://typonotes.com/posts/2021/09/07/golang-map-struct-value-modify/
- 本文为原创文章,转载注明出处。
- 欢迎 扫码关注公众号
Go与云原生
或 订阅网站 https://typonotes.com/ 。 - 第一时间看后续精彩文章。觉得好的话,请猛击文章右下角「在看」,感谢支持。