首页 > 解决方案 > 在 Go 切片中追加时超出范围

问题描述

在某些情况下,当 i == len(SliceA) 我得到切片越界错误。

//filterIntersection removes points from two slices that have common points.
func filterIntersection(sliceA, sliceB *[]ds.Coord) {
    for i, a := range *sliceA {
        for j, b := range *sliceB {
            if a == b {
                (*sliceA) = append((*sliceA)[:i], (*sliceA)[i+1:]...) <--- error here
                (*sliceB) = append((*sliceB)[:j], (*sliceB)[j+1:]...)
            }
        }
    }
}

标签: goslice

解决方案


那么如果i == len(SliceA),则sliceA[i+1]超出范围!这不是“在某些情况下”,而是在每种情况下,同样的情况也会发生在 SliceB 上。

考虑打破你的循环 ifi == len(SliceA)j == len(SliceB).

另一种解决方案是使用“常规” for 循环:for i := 0; i < len(SliceA); i++


推荐阅读