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

In python, I find the context managers really helpful. I was trying to find the same in Go.

e.g:

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

where open is a context manager in python handling the entry and exit, which implicitly takes care of closing the file opened.

Instead of we explicitly doing like this:

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

Can this be done in Go as well ? Thanks in advance.

No, you can't, but you can create the same illusion with a little wrapper func:

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)
}