在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中完成吗?提前谢谢。
答案 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)
}