zoukankan      html  css  js  c++  java
  • 04 错误处理

    1. error接口

    如何在函数中返回错误

    // 函数返回错误的方法: 将error作为多重返回值中的最后一个
    func Foo(param int)(n int, e error)  {
        if param < 0{
            e = errors.New("必须为正整数")
        }
        n = ^param
        return
    }
    
    func main()  {
        n, e := Foo(-4)
        if e != nil{
            fmt.Printf("错误处理",e)
        } else {
            fmt.Println(n, e)
            fmt.Printf("使用正常返回值n")
        }
    }

    自定义错误类型

    // 自定义error类型
    // 定义一个用于承载错误信息的类型
    type PathError struct {
        Op string
        Path string
        Err error
    }
    
    func(e *PathError) Error() string {
        return e.Op + " " + e.Path + " : " + e.Err.Error()
    }
    
    func Stat(name string) (fi os.FileInfo, err error)  {
        var stat syscall.Stat_t
        err = syscall.Symlink(name, &stat)
        
        if err != nil{
            return nil, &PathError{"stat", name, err}
        }
        return fileInfoFromStat(&stat, name), nil
    }

    2. defer

    1. 延迟执行defer后面的函数调用,在包含当前defer语句的函数执行return时执行,
    2. defer后边必须是函数调用
    3. 当函数中存在多个defer时,按照lifo队列的顺序执行

      

    // file 对象打开后的自动关闭
    func Copyfile(dstname, srcname string)(written int64, err error)  {
        src, err := os.Open(srcname)
        if err != nil{
            return
        }
        defer src.Close()
    
        dst, err := os.OpenFile(dstname, os.O_APPEND|os.O_WRONLY, os.ModeAppend)
        if err != nil{
            return
        }
        defer dst.Close()
    
        return io.Copy(dst, src)
        //return 1, nil
    }
    
    func main()  {
        written, err := Copyfile("/Users/aibyte/Documents/code/go/awesomeProject/4错误处理/2.txt", "/Users/aibyte/Documents/code/go/awesomeProject/4错误处理/1.txt")
        if err != nil{
            fmt.Println(err)
        }
        fmt.Println(written, err)
    }
  • 相关阅读:
    BZOJ 2212/BZOJ 3702
    BZOJ 4761 Cow Navigation
    BZOJ 3209 花神的数论题
    BZOJ 4760 Hoof, Paper, Scissors
    BZOJ 3620 似乎在梦中见过的样子
    BZOJ 3940 Censoring
    BZOJ 3942 Censoring
    BZOJ 3571 画框
    BZOJ 1937 最小生成树
    BZOJ 1058 报表统计
  • 原文地址:https://www.cnblogs.com/zhangjian0092/p/12357276.html
Copyright © 2011-2022 走看看