1 回答

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超6個(gè)贊
好的。所以我弄清楚出了什么問題:
go中的地圖是通過引用傳遞的……有點(diǎn)。并不真地。
即使地圖前面沒有指針……它們是通過引用傳遞的……有點(diǎn)。確實(shí)不是,但您可以在這篇文章“go 中沒有按引用傳遞”和這篇文章“如果映射不是引用變量是什么”中了解更多相關(guān)信息。我將為您提供這段摘錄以澄清正在發(fā)生的事情:
映射值是指向 runtime.hmap 結(jié)構(gòu)的指針。
即使地圖不是通過引用而是通過值傳遞的……您傳遞給函數(shù)的原始地圖變量也會(huì)被修改。這意味著當(dāng)我在 mergeKeys 函數(shù)中更改左側(cè)地圖時(shí),我實(shí)際上也在更改 compareEvent.groups 地圖。
為了解決這個(gè)問題,我創(chuàng)建了一個(gè)垃圾地圖,我可以對其進(jìn)行變異并且不會(huì)產(chǎn)生任何后果:
if overlaping {
trashMap := make(map[string]bool)
for key, value := range comparisonEvent.groups {
trashMap[key] = value
}
groups := mergeKeys(trashMap, eventItem.groups)
switch overlapCase {
case 1:
overlaps = append( overlaps, event{eventItem.start, eventItem.end, groups} )
case 2:
overlaps = append( overlaps, event{comparisonEvent.start, comparisonEvent.end, groups} )
case 3:
overlaps = append( overlaps, event{eventItem.start, comparisonEvent.end, groups} )
case 4:
overlaps = append( overlaps, event{comparisonEvent.start, eventItem.end, groups} )
}
}
在我接受這個(gè)答案之前,我仍然愿意討論和更好的解決方案。我希望這可以幫助那里的人!
- 1 回答
- 0 關(guān)注
- 134 瀏覽
添加回答
舉報(bào)