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个赞
如果要更改元素或为其赋值,请获取黄金贴图并为映射键赋值gold
gold
goldMap := result["player"].(map[string]interface{})["inventory"].(map[string]interface{}) goldMap["gold"] = 100
但是,请确保您的初始地图不是 。否则,二进制文件将会死机。为此,您需要逐个分配所有地图并检查是否nil
nil or not
慕丝7291255
TA贡献1859条经验 获得超6个赞
地图元素不可寻址;允许映射实现根据需要重新排列内存中的元素,这将使指向这些元素的任何指针无效。根据规格:
对于 类型的操作数,地址操作会生成一个指向 的指针。操作数必须是可寻址的,即变量、指针间接寻址或切片索引操作;或可寻址结构操作数的字段选择器;或可寻址数组的数组索引操作。
x
T
&x
*T
x
映射元素不在可寻址值列表中。
如果可能的话,你最好定义结构来匹配你的数据结构;它将大大简化代码中该数据的所有使用。您可以使用 json-to-go 为您构建数据结构,尽管这应该仅用于提供工作起点。
- 2 回答
- 0 关注
- 80 浏览
添加回答
举报
0/150
提交
取消