You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Range过滤切片中的偶数时出现编译错误,请求修复代码

修复Go语言Range遍历切片过滤偶数的编译错误

错误原因分析

  • 循环变量命名冲突:for _, evenNumbers := range numbers里,循环变量名和目标切片evenNumbers重名,导致循环内的evenNumbers被覆盖为单个int类型的遍历元素,而非原本的切片。
  • 偶数判断逻辑错误:if numbers % 2有两个问题:一是误用了整个切片numbers而非当前遍历的元素;二是Go语言不允许将整数直接作为布尔条件,必须显式判断num % 2 == 0来表示偶数。
  • append函数使用错误:append(numbers)既没有指定要添加的元素,也没有将元素添加到目标切片evenNumbers中,正确用法是append(目标切片, 要添加的元素)。

修复后的代码

package main_test

import (
    "reflect"
    "testing"
)

func TestFilterEvenNumbers(t *testing.T) {
    numbers := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

    evenNumbers := []int{} // use range to filter even numbers

    // 重命名循环变量为num,避免和目标切片冲突
    for _, num := range numbers {
        // 显式判断当前元素是否为偶数
        if num%2 == 0 {
            // 将符合条件的元素添加到evenNumbers切片
            evenNumbers = append(evenNumbers, num)
        }
    }

    if !reflect.DeepEqual(evenNumbers, []int{2, 4, 6, 8, 10}) {
        t.Errorf("evenNumbers does not contain all the required even numbers, got %v", evenNumbers)
    }
}

验证说明

修复后的代码可以正常编译运行,遍历numbers切片时筛选出所有偶数并添加到evenNumbers中,最终通过reflect.DeepEqual验证结果是否符合预期。

内容的提问来源于stack exchange,提问作者M200020947568

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 02:57:13