package main

import (
	"fmt"
	"log"
)

func main() {
	ret := practice()
	fmt.Println(ret)
}

func practice() (result int) {
	defer func() {
		if r := recover(); r != nil {
			log.Println("Recovered in f", r)
			// 断言, 参考第七章7.10节的内容
			// see: https://zhuanlan.zhihu.com/p/149015320
			// 具体作用为检查接口中是否包含int类型的值, 并返回该值
			// panic接受一个类型为any的参数
			// 该参数的any类型实际为一个空接口
			// 参考Go安装目录 /src/builtin/builtin.go:95 :252
			result = r.(int) // 断言 int
		}
	}()
	panic(34)
}
