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)
    }
  • 相关阅读:
    oracle——定时器时间设置
    Servlet上下文监听
    jsp开发中页面数据共享技术
    String类的创建
    Microsoft Enterprise Library 5.0 系列 Configuration Application Block
    How to print only the selected grid rows
    企业库的保存方法
    devexpress pictureedit 按钮调用其菜单功能
    Devexpress IDE 插件 卸载
    修改安装包快捷方式路径
  • 原文地址:https://www.cnblogs.com/zhangjian0092/p/12357276.html
Copyright © 2011-2022 走看看