Golang中Range作为返回值时无法正常遍历的问题排查
问题分析
你的问题核心在于test2函数的返回值设计和逻辑错误:
- 你定义的返回值
res int是单个整数,遍历数组时每次都会用当前loop的值覆盖res,循环结束后自然只保留最后一次遍历的结果,而非所有遍历元素。 - 要实现和
test1一致的输出效果,函数需要返回所有遍历到的元素集合,而非单个值。
解决方案
修改test2的返回值类型为切片(或数组),遍历过程中收集所有元素后返回:
package main import ( "fmt" ) var cube [2][4]int func test1(num int) { for _, loop := range cube[num] { //0-3 fmt.Println("test one returns ", loop) } } // 修改返回值为切片,收集所有遍历元素 func test2(num int) []int { var res []int for _, loop := range cube[num] { //0-3 res = append(res, loop) } return res } func main() { test1(1) //遍历第二列 fmt.Println("ISSUE FIXED!") // 打印返回的切片,输出所有元素 fmt.Println("test two returns: ", test2(0)) //遍历第一列,结果与test1一致 }
补充说明
- 如果需要严格返回数组类型(而非切片),可以直接返回
cube[num]本身(因为cube[num]是长度为4的数组):func test2(num int) [4]int { return cube[num] } - 原代码中
cube数组未初始化,所有元素默认值为0,运行时会输出四个0,你可以给cube赋值来验证自定义效果。
内容的提问来源于stack exchange,提问作者user19659747
相关产品推荐
相关产品推荐

