在代码片段中首次执行循环时,抛出一个异常。我的问题是当恐慌发生时如何继续执行循环的下一次迭代。就像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
}
}
答案 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)
答案 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)
}
}