标签:defer 处理 fmt Golang int func Println recover 异常
异常处理
panic : 相当于 python 的 raise
func test111() interface{} {
return 1 / 1
}
func main() {
a := test111()
// panic("111") // 报错结束,致命错误,一般不用 相当于 raise
fmt.Println(a)
}
defer : 栈结构
func main() {
defer fmt.Println("good") // 最后执行,必须在函数内使用
defer fmt.Println("world") // 后进先出,栈结构
// world
// good
// defer中,延迟调用函数,报错,其他代码依然执行
x := 10
y := 20
defer func() {
fmt.Println(x, y)
}()
x = 100
y = 200
fmt.Println(x, y)
// 100 200
// 100 200
x := 10
y := 20
defer func(x int, y int) {
fmt.Println(x, y)
}(x, y)
x = 100
y = 200
fmt.Println(x, y)
// 100 200
// 10 20
// defer 虽然后执行,但是如果匿名函数有参数,会先传参数,再后执行。
}
recover : 相当于 try except
func tcore(x int) {
var a [1]int
fmt.Println(a[x])
}
func tcore1(x int) { // recover 必须搭配defer使用,并且匿名函数 相当于 try except
defer func() { // recover 必须在defer调用的函数中使用
if err := recover(); err != nil { // 如果recover返回为空,说明没报错,不打印
fmt.Println(recover())
}
}()
var a [1]int
fmt.Println(a[x])
}
// aaa
// runtime error: index out of range [3] with length 1
// bbb
func main() {
fmt.Println("aaa")
// tcore(3) // 运行报错结束
tcore1(0) // 不会报错,继续运行,recover (搭配defer使用)
fmt.Println("bbb")
}
标签:defer,处理,fmt,Golang,int,func,Println,recover,异常 来源: https://www.cnblogs.com/pythonwl/p/14664473.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。