错误

作者: isuntong | 来源:发表于2020-03-11 11:44 被阅读0次

错误

package main

import (
    "errors"
    "fmt"
)

//43
func main() {
    //f,err := os.Open("test.txt")
    //if err != nil {
    //  // log.Fatal(err) //2020/03/11 10:27:38 open test.txt: The system cannot find the file specified.
    //  fmt.Println(err) //open test.txt: The system cannot find the file specified.
    //  return
    //}
    //fmt.Println(f.Name(),"打开文件成功")

    /*
    error:内置得数据类型,内置的接口
        定义的方法:Error() string

    使用go语言提供好的包:
        errors包下的函数:New(),创建一个error对象
        fmt包下得Errorf()函数:
            func Error(format string,a ...interface{}) error
    */

    err1 := errors.New("自己创建玩的...")
    fmt.Println(err1) //自己创建玩的...
    fmt.Printf("%T\n",err1) //*errors.errorString

    //另一个创建error得方法
    err2 := fmt.Errorf("错误信息码:%d",100)
    fmt.Println(err2)
    fmt.Errorf("%T\n",err2)


    err3 := checkAge(-1)
    if err3 != nil {
        fmt.Println(err3)
        return
    }
    fmt.Println("...........")

}

//设计一个函数,验证年龄是否合法
func checkAge(age int) error {
    if age < 0 {
        return errors.New("年龄不合法")
    }
    fmt.Println("年龄是:",age)
    return nil
}


错误类型表示

package main

import (
    "fmt"
    "os"
)

//44
func main() {

    /*
        错误类型表示
    */

    f,err := os.Open("test.txt")
    if err != nil {
        fmt.Println(err)
        if ins,ok := err.(*os.PathError);ok {
            fmt.Println("1.0p:",ins.Op) //1.0p: open
            fmt.Println("2.Path",ins.Path) //2.Path test.txt
            fmt.Println("3.Err:",ins.Err) //3.Err: The system cannot find the file specified.
        }
        return
    }
    fmt.Println(f.Name(),"打开文件成功")

    

}
package main

import (
    "fmt"
    "net"
    "path/filepath"
)

//45
func main() {

    /*
        错误类型表示
    */

    addr,err := net.LookupHost("www.baidu.com")
    fmt.Println(err)  //<nil>
    if ins,ok := err.(*net.DNSError);ok {
        if ins.Timeout() {
            fmt.Println("操作超时")
        } else if ins.Temporary() {
            fmt.Println("临时性错误")
        } else {
            fmt.Println("通常错误")
        }
    }
    fmt.Println(addr) //[39.156.66.18 39.156.66.14]

    files,err := filepath.Glob("[")
    if err != nil && err == filepath.ErrBadPattern {
        fmt.Println(err) //syntax error in pattern 提供的解析模式错误
        return
    }
    fmt.Println("files:",files)

}

自定义error

package main

import (
    "fmt"
    "math"
)

//46
func main() {

    /*
        自定义error
    */
    radius := -3.0
    area,err := circleArea(radius)
    if err!= nil {
        fmt.Println(err)
        // 使用断言获得非法数据
        if err,ok := err.(*areaError);ok {
            fmt.Printf("半径是:%.2f\n",err.radius)
        }
        return
    }
    fmt.Println("圆形的半径是:",area)


}

//定义一个结构体,表示错误得类型
type areaError struct {
    msg string
    radius float64
}

//2. 实现error接口,就是实现Error()方法
func (e *areaError) Error() string {
    return fmt.Sprintf("error:半径,&.2f,%s",e.radius,e.msg)
}

func circleArea(radius float64)(float64,error) {
    if radius < 0 {
        return 0,&areaError{"半径非法",radius}
    }
    return math.Pi * radius * radius,nil
}

panic和recover

package main

import "fmt"

//47
func main() {

    /*
        panic 和 recover

    */

    funA()
    defer myprint("defer main3......")

    funB()
    defer myprint("defer main4......")

    fmt.Println("main over...")

}

func myprint(s string) {
    fmt.Println(s)
}

func funA() {
    fmt.Println("我是第一个函数funA")
}

func funB() { //外围函数

    defer func() {
        if msg := recover();msg != nil {
            fmt.Println(msg,"程序恢复了")
        }
    }()

    fmt.Println("我是函数funB")
    defer myprint("defer funB()1.....")
    for i:=1;i<=10;i++ {
        fmt.Println("i:",i)
        //让程序中断
        if i == 5 {
            panic("funB函数,恐慌")
        }
    }
    //当外围函数代码中发生了恐慌,只有其中所有的defer得函数全部执行完毕后,才会被传到函数的调用出
    defer myprint("defer funB()2.....")
}

相关文章

  • 09 错误处理

    错误分类 语法错误 运行时错误:提示性错误,警告性错误,致命性错误 逻辑错误 错误分级 php语言将各种错误作了不...

  • 错误监控

    前端错误的分类 即时运行错误—代码错误 资源加载错误(比如图片加载错误,CSS加载错误,JS加载错误等) 错误的捕...

  • 前端 错误监控

    错误类型: (1)代码错误/即时错误:(2)资源加载错误 错误监控方法 即时错误:try....catch.......

  • 错误监控

    一、前端错误的分类 即使运行错误(代码错误) 资源加载错误 二、错误的捕获方式 即使运行错误(代码错误) try...

  • 异常处理

    语法错误:(错误) 书写错误,可以通过编辑器发现错误(NameError)通过错误定位,直接修改 运行错误:(异常...

  • 错误监控

    前端错误的分类 即时运行错误(代码错误) 资源加载错误 错误的调试方式 错误的捕获方式 即时运行错误的捕获方式 t...

  • 华文未来出版干货分享第六十四弹:图书的三审到底是在审什么?

    初审: ①改正书稿中出现的字词错误、读音错误、知识性错误、语法错误、逻辑错误、欧化错误、观点错误等。 ②统一全书体...

  • 爱情是一场错误

    太平洋错误的风 刮来了南方错误的雨 少年错误的出游 遇见了错误的姑娘 于是,他俩 错误地初见 错误地交谈 错误地表...

  • 前端错误监控

    怎么做错误监控?如何保证产品质量? 错误分类 即时运行错误,代码错误 资源加载错误 错误的捕获方式 即时运行错误捕...

  • 错误监控

    前端错误分类 即时运行错误:代码错误 资源加载错误:资源加载失败 错误捕获方式 即时运行错误-- try...ca...

网友评论

      本文标题:错误

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