我们可以像在python中一样在Go中创建上下文管理器吗?

时间:2016-05-21 21:40:22

标签: go

在python中,我发现上下文管理器确实非常有用。我试图在 Go 中找到相同的内容。

e.g:

with open("filename") as f:
    do something here

其中open是python中处理入口和出口的上下文管理器,它隐含地关闭了打开的文件。

而不是我们明确这样做:

f := os.Open("filename")
//do something here
defer f.Close()

这可以在Go中完成吗?提前谢谢。

1 个答案:

答案 0 :(得分:5)

不,你不能,但你可以用一个小包装函数创建相同的错觉:

func WithFile(fname string, fn func(f *os.File) error) error {
    f, err := os.Open(fname)
    if err != nil {
        return err
    }
    defer f.Close()
    return fn(f)
}