<meta charset="utf-8">
go 语言错误处理
panic recover defer 最大公约数 最小公倍数
go语言中的没有try catch的。代替的是panic-recover的机制。手动编写错误提示。
举个栗子:
//求正整数a和b的最小公倍数
package main import "fmt"
//最小公约数
func multiple(a, b int) int {
c := divisor(a, b)
return (a * b / c)
}
//最大公约数
func divisor(a, b int) int {
var r int
fmt.Println(a, "%", b, "=", a%b)
for {
r = a % b
if r != 0 {
a = b
b = r
} else {
break
}
}
return b
}
func main() {
fmt.Println("aa")
var a, b int
fmt.Scanf("%d,%d", &a, &b)
defer func() {
if err := recover(); err != nil {
fmt.Println("异常退出", err)
} else {
fmt.Println(multiple(a, b))
}
}()
f(a, b)
}
//判定不能a>b
func f(a, b int) {
if a > b {
panic("a不能大于b")
}
}
为了能捕捉到 panic输出的内容,并让其不报错。主程序中需要对使用验证的部分进行defer。
关于defer的func(){}()的问题
尝试一下
func test() {
for i := 0; i < 3; i++ {
defer func() {
fmt.Println(i)
}()
}
}
func main(){
test()
}
输出为:
image.png
看来循环后才把i值传进去。
func test() {
for i := 0; i < 3; i++ {
defer func(i int) {
fmt.Println(i)
}(i)
}
}
通过(i)把值传进去。
输出:
image.png
网友评论