Go语言中并没有提供内置函数来删除切片,熟悉Java/PHP的都知道,在Java/PHP中都提供对list或数组的filter操作,那么在Go语言中就需要多用几行代码来实现删除切片中的指定元素了。

循环截取法

假设有个1~9的数组,要删除掉其中的偶数,那么这里先进行for循环,依次判断元素是否为偶数,然后将偶数的元素通过索引截取掉,下标i向左移动一位。

    numbers := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
    for i := 0; i < len(numbers); i++ {
        if numbers[i]%2 == 0 { // 如果是偶数就删除
            // 通过截取删除
            numbers = append(numbers[:i], numbers[i+1:]...)
            i--
        }
    }
    fmt.Println(numbers) // [1 3 5 7 9]

移位覆盖法

同样是1~9的数组,通过遍历,将不需要删除的元素依次在原来的数组上覆盖原有元素。最后只截取前面j个有效元素即可。

    numbers := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
    j := 0
    for _, num := range numbers {
        if num%2 == 0 { // 如果是偶数就删除
            continue
        }

        numbers[j] = num
        j++
    }
    fmt.Println(numbers[:j]) // [1 3 5 7 9]

最后,推荐使用第二种方法,性能更好。