忽略 Close() 的 error 是不是安全的呢?

func hi() error {
    f, err := os.Create("a.txt")
    if err != nil {
        return err
    }
    defer f.Close()
    ...
    return nil
}

f.Close() 会返回一个err,defer f.Close() 会不会有问题呢?

已邀请:

如果不想忽略可以这样:

func hi()(err error){
    f,err:= os.Create("a.txt")
    if err!=nil {
        return err
    }
    defer func(){
        if e:= f.Close();e!=nil {
            err = e
        }
    }()
    return nil  
}

h12 - https://h12.io/about

赞同来自: haoc7

严格来说如果能判断处理最好,Close之所以返回错误是因为确实有出错的可能。但前提是,你得知道操作系统可能返回哪些错,你需要处理哪些错,要怎样处理每种情况。如果不知道,可能你的应用还没有关键到需要细致的处理关闭文件错误的程度。

xiaoming - 享受独处

赞同来自:

defer 只是将执行顺序放到了最后相当于

func hi() error {
    f, err := os.Create("a.txt")
    if err != nil {
        return err
    }
    ...
    f.Close()
    return nil
}

haoc7 - http://cuihao.fun

赞同来自:

// Close closes the File, rendering it unusable for I/O.
// It returns an error, if any.
func (f *File) Close() error {
    if f == nil {
        return ErrInvalid
    }
    return f.file.close()
}

Close 会返回一个 error ,这个error 并没有进行任何处理。

viewer

赞同来自:

要看你的场景需要

ddxx11223

赞同来自:

问个题外话,close文件时发生错误,除了是关闭已经关闭过的文件,或者磁盘故障,还有别的情况吗?

要回复问题请先登录注册