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)
    }
  • 相关阅读:
    011-通过网络协议解析网络请求-DNS-ARP-TCPIP
    010-HTTP协议
    009-DNS域名解析系统
    008-ICMP协议(网络控制文协议)
    007-IP报文协议
    007-排序算法-堆排序
    006-排序算法-希尔排序
    007-Linux 查看端口
    005-排序算法-归并排序
    004-排序算法-选择排序
  • 原文地址:https://www.cnblogs.com/zhangjian0092/p/12357276.html
Copyright © 2011-2022 走看看