异常发生时继续执行循环

时间:2017-05-04 16:22:14

标签: go

在代码片段中首次执行循环时,抛出一个异常。我的问题是当恐慌发生时如何继续执行循环的下一次迭代。就像java中的try catch机制一样,循环将继续执行下一次迭代循环。

package main

import (
        "fmt"
)

func main() {
        var arr []int = []int{5, 6, 7, 8, 9}
        fmt.Println(arr)
        for i := 6; i < 10; i++ {
                defer func() {
                        fmt.Println("aaa")
                        if err := recover(); err != nil {
                                fmt.Printf("error is %v\n", err)
                        }
                }()
                arr[i] = i

        }

}

2 个答案:

答案 0 :(得分:4)

问题是您的切片长度和容量为5,

https://play.golang.org/p/7wy91PTPum

并且您正在尝试向第6个位置添加内容。

您需要设置一个固定的大小,您知道该大小将包含您想要放入的所有内容:

var arr [10]int = [10]int{5, 6, 7, 8, 9}

https://play.golang.org/p/GSNDXGt1Jp

或使用append并更改

arr[i] = i

arr = append(arr, i)

https://play.golang.org/p/kHNsFpcjVx

答案 1 :(得分:1)

你可以将所有工作包装在一些函数中,并在其中调用延迟恢复

package main

import (
        "fmt"
)

func doSmth(arr []int, idx int) {
    defer func() {
        if err := recover(); err != nil {
            fmt.Printf("error is %v\n", err)
        }
    }()
    arr[idx] = idx
}

func main() {
    var arr []int = []int{5, 6, 7, 8, 9}
    fmt.Println(arr)
    for i := 6; i < 10; i++ {
        doSmth(arr, i)
    }
}