现在有这样一个问题: 某函数如果正常执行,返回0, 如果panic, 则返回1, 怎么搞呢?

package main 
import "fmt" 

func test() int {
	defer func() {
		if err := recover(); err != nil {
			return 1
		}
	}()

	var p *int
	*p = 0

	return 0
}

func main() {
	fmt.Println("ret is", test())
	for {}
}

         这样显然不行,因为那个return 1是针对匿名函数的, 而非test函数。

 

         来看一个巧妙的方法:

package main 
import "fmt" 

func test() (a int) {
	defer func() {
		if err := recover(); err != nil {
			a = 1
		}
	}()

	var p *int
	*p = 0

	return 0
}

func main() {
	fmt.Println("ret is", test())
	for {}
}

        OK.

 

       不多说。

 

 


本文转载:CSDN博客