为了账号安全,请及时绑定邮箱和手机立即绑定

用指针更改接口值——无法取问题地址

用指针更改接口值——无法取问题地址

Go
一只斗牛犬 2022-08-30 21:53:36
json.Unmarshal([]byte(byteValue), &result)在 json 之后。Unmarshal,结果是一个map[string]interface{}我可以通过以下方式直接操作地图的值:result["player"].(map[string]interface{})["inventory"].(map[string]interface{})["gold"]=100但这是一个很长的变量名称,我想指定一个指针来解决这个问题,并用一个更短的名字进行操作,比如:gold:=&result["player"].(map[string]interface{})["inventory"].(map[string]interface{})["gold"]然后只操纵*黄金。尝试执行此操作,我收到错误:无法获取结果[“玩家”]的地址。(map[string]interface {})[“库存”]。(map[string]interface {})[“黄金”]
查看完整描述

2 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

如果要更改元素或为其赋值,请获取黄金贴图并为映射键赋值goldgold

goldMap := result["player"].(map[string]interface{})["inventory"].(map[string]interface{})
goldMap["gold"] = 100

但是,请确保您的初始地图不是 。否则,二进制文件将会死机。为此,您需要逐个分配所有地图并检查是否nilnil or not


查看完整回答
反对 回复 2022-08-30
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

地图元素不可寻址;允许映射实现根据需要重新排列内存中的元素,这将使指向这些元素的任何指针无效。根据规格

对于 类型的操作数,地址操作会生成一个指向 的指针。操作数必须是可寻址的,即变量、指针间接寻址或切片索引操作;或可寻址结构操作数的字段选择器;或可寻址数组的数组索引操作。xT&x*Tx

映射元素不在可寻址值列表中。

如果可能的话,你最好定义结构来匹配你的数据结构;它将大大简化代码中该数据的所有使用。您可以使用 json-to-go 为您构建数据结构,尽管这应该仅用于提供工作起点。


查看完整回答
反对 回复 2022-08-30
  • 2 回答
  • 0 关注
  • 80 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信