美文网首页Go语言实践Go
go 语言错误处理

go 语言错误处理

作者: guazi1020 | 来源:发表于2019-06-18 15:26 被阅读0次

    <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

    相关文章

      网友评论

        本文标题:go 语言错误处理

        本文链接:https://www.haomeiwen.com/subject/aaufqctx.html