package main import ( "fmt" ) /* In Python land we can use: with open('foo.txt') as f: # Do stuff with f ... # f is closed when we get here Any type implementing the so-called context manager interface can be used in a with expression; its __enter__ method will be called first, then the body of the with will be executed, then its __exit__ method will be called. Typically, __exit__ is used to clean up some resource. In the above example, the context manager is an open file, and its __exit__ closes the file. This would be one way to get similar with Golang */ type wither interface { exit() enter() } func With(w wither, f func()) { defer w.exit() w.enter() f() } type Foo struct{} func (*Foo) enter() { fmt.Println("Opens file") } func (*Foo) exit() { fmt.Println("Closes file") } func (*Foo) DoAThing(s string) { fmt.Println("<", s, ">") } func main() { // Make a Foo - it satisfies *wither* interface foo := &Foo{} With(foo, func() { foo.DoAThing("I'm withing") }) }

About the Playground

The Go Playground is a web service that runs on golang.org's servers. The service receives a Go program, vets, compiles, links, and runs the program inside a sandbox, then returns the output.

If the program contains tests or examples and no main function, the service runs the tests. Benchmarks will likely not be supported since the program runs in a sandboxed environment with limited resources.

There are limitations to the programs that can be run in the playground:

The playground can use most of the standard library, with some exceptions. The only communication a playground program has to the outside world is by writing to standard output and standard error.

In the playground the time begins at 2009-11-10 23:00:00 UTC (determining the significance of this date is an exercise for the reader). This makes it easier to cache programs by giving them deterministic output.

There are also limits on execution time and on CPU and memory usage.

The article "Inside the Go Playground" describes how the playground is implemented. The source code is available at https://go.googlesource.com/playground.

The playground uses the latest stable release of Go.

The current version is go1.14.8.

The playground service is used by more than just the official Go project (Go by Example is one other instance) and we are happy for you to use it on your own site. All we ask is that you contact us first (note this is a public mailing list), use a unique user agent in your requests (so we can identify you), and that your service is of benefit to the Go community.

Any requests for content removal should be directed to security@golang.org. Please include the URL and the reason for the request.