前几天提交的代码进行测试的时候发现变量无法赋值,原始代码如下:

  for _, asset := range dspInfo.native.Assets {
var resAsset protocol.ResAsset
resAsset.Id = asset.Id
resAsset.Required = &asset.Required
resAsset.AssetType = asset.AssetType
}

经过分析,定位到问题:

循环中使用到了内存地址,将asset.Required 的地址赋值给新的变量,不仔细看感觉没有问题。

实际使用过程中由于asset 是一个变量,定义后for 循环的整个过程都不会变化,后面的asset.Required 会把前面的值覆盖,因此会出现问题。

进行如下修改即可:

  for idx, asset := range dspInfo.native.Assets {
var resAsset protocol.ResAsset
resAsset.Id = asset.Id
resAsset.Required = &dspInfo.native.Assets[idx].Required
resAsset.AssetType = asset.AssetType
}