package main
import (
"fmt"
"os"
)
func main() {
file, err := os.Open("./src/main/test.txt")
if err != nil {
fmt.Println("open error ", err)
}
defer file.Close()
fmt.Println(file)
}
defer file.Close()这句话在goland中会有蒙灰提示,说Unhandled error,close时有可能发生错误,我该如何处理这个错误呢?
1.结构清晰时可以不用上面的defer
2.defer的函数出现错误,可以选择以下几种处理方案:
2.1 严重错误,直接panic
2.2 一般错误,如果函数返回参数中有error类型的,可以直接修改这个返回值(当然必须使用命名返回值)告诉调用者。也可以仅仅将错误的情况输出日志,然后让函数返回一个空的结果,比如nil指针。
上面的代码,首先可以不用defer,直接处理就好了:
在返回路径复杂使用defer比较方便时,可以将出错代码放在一个匿名函数中: