for 循環變量取內存地址
阿新 • • 發佈:2017-12-06
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 循環變量取內存地址