Golang中国

//以下为伪代码
h = openfile(123.txt)
defer h.close()
//省略n个字
//这里我要删除这个文件 那当然我就要close 不然会被占用删除不了
h.close()
deletefile(123.txt)

这就有一个问题了,我前面使用了defer,然后又主动close了,那函数返回的时候又会调用close,这会出问题的吧?所以请教下你们是怎么处理这个问题的。


xdeng 于 2017-06-14 11:07 修改
4 回复
jthmath
#1 jthmath • 2017-06-14 11:46
func jump() {
    h = openFile("123.txt")
    var deleted bool
    defer func() {
        if (!deleted) {
            h.Close()
        }
    }()

    // ......

    h.Close()
    deletefile("123.txt")
    deleted = true
}
coldwater
#2 coldwater • 2017-06-15 14:12

重复close会返回一个error,没有特殊要求通常忽略这个error。

PingD
#3 PingD • 2017-06-15 16:47

要么改成全手动模式,要么按照楼上的方式,用一个bool值进行判断该文件是否已经手动close掉了

xdeng
#4 xdeng • 2017-06-15 17:36

谢谢楼上的各位回答,这怎么不像v2ex那样可以@人或者感谢啊。。。

需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。