1. 程式人生 > >for 循環變量取內存地址

for 循環變量取內存地址

type 無法 protocol bsp prot sas req toc span

前幾天提交的代碼進行測試的時候發現變量無法賦值,原始代碼如下:

  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 }

for 循環變量取內存地址