Skip to main content

Golang Panic后的返回值

正解

在Go语言,执行过程出现panic后,返回值是默认值。

如 error 为 nil, int 为 0, string 为空串,等等。

返回值示例

下面模拟一个数组越界的panic,用recover恢复后,可以获得返回值。

package main

// ReadArray 读一个数组,返回数组元素(int)
func ReadArray (array []int, index int) int{
  // 出现错误时,直接尝试恢复
  defer func () {
    recover()
  } ()
  return array[index]
}

// main 程序入口
func main () {
  var TheReturn int

  TheReturn = ReadArray([]int{1,2,3,4,5}, 99)
  println(TheReturn)
}

运行结果

0

修改返回值

通过改变方法签名的初始变量,可以从panic恢复后,改变返回值。

package main

// ReadArray 读一个数组,返回数组元素(int)
func ReadArray (array []int, index int) (value int){
  // 出现错误时,直接尝试恢复
  defer func () {
    recover()
  } ()
  // 如果出现Panic,则返回 -1
  value = -1
  value = array[index]
  return value
}

// main 程序入口
func main () {
  var TheReturn int
  
  Array := []int{1,2,3,4,5}
  TheReturn = ReadArray(Array, 99)
  println(TheReturn)
}

运行结果

-1

参考

Return value of the function when panic is recovered in Go (Golang)