Go 切片默认引用,造成的 Bug
🪁

Go 切片默认引用,造成的 Bug

如下代码有 Bug:
// sortRelatedIds 因为是引用类型,所以在进行 append 时改变了 sortRelatedIds 切片 tmp := append(sortRelatedIds[:i+1], batchInsertIds...) if i+1 == len(sortRelatedIds) { sortRelatedIds = tmp } else { // sortRelatedIds 这里使用就会出现问题,因为改切片已被修改 sortRelatedIds = append(tmp, sortRelatedIds[i+1:]...) }
解决办法:
// 拷贝 sortRelatedIds[:i+1] copyFront := make([]int64, i+1) copy(copyFront, sortRelatedIds[:i+1]) tmp := append(copyFront, batchInsertIds...)