package main import ( "encoding/json" "fmt" "os" ) type ApiWrapper interface { Query(string) SearchResult } type Movie struct { Title string Link string Price float64 } type SearchResult struct { Service string Movie Movie } type Youtube struct{} type Amazon struct{} func (y Youtube) Query(query string) SearchResult { // this is all done dynamically in the real implementation // and the implementation for each service (youtube in this case) // is in it's own file, but in the same package namespace as all // other wrappers movie := Movie{"Inception", "http://youtube.com/inception", 2.99} searchResult := SearchResult{"youtube", movie} return searchResult } func (a Amazon) Query(query string) SearchResult { // this is all done dynamically in the real implementation // and the implementation for each service (youtube in this case) // is in it's own file, but in the same package namespace as all // other wrappers movie := Movie{"Inception", "http://amazon.com/inception", 2.99} searchResult := SearchResult{"amazon", movie} return searchResult } func main() { resultsMap := make(map[string]Movie) movieQuery := "inception" ch := make(chan SearchResult) wrappers := []ApiWrapper{new(Youtube), new(Amazon)} for _, wrapper := range wrappers { go func(wrapper ApiWrapper) { ch <- wrapper.Query(movieQuery) }(wrapper) } for i := 0; i < 2; i++ { result := <-ch resultsMap[result.Service] = result.Movie } if err := json.NewEncoder(os.Stdout).Encode(&resultsMap); err != nil { fmt.Println(err) } }

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.