Go on App Engine: tools, tests, and concurrency
13 Dec 2013
Tags: appengine

Andrew Gerrand

Johan Euphrosine

* Background

When we [[http://blog.golang.org/go-and-google-app-engine][launched Go for App Engine]]
in May 2011 the SDK was just a modified version of the Python SDK.
At the time, there was no canonical way to build or organize Go programs, so it
made sense to take the Python approach. Since then Go 1.0 was released,
including the [[https://golang.org/cmd/go/][go tool]] and a
[[https://golang.org/doc/code.html][convention]] for organizing Go programs.

In January 2013 we announced
[[http://blog.golang.org/the-app-engine-sdk-and-workspaces-gopath][better integration]]
between the Go App Engine SDK and the go tool, promoting the use of
conventional import paths in App Engine apps and making it possible to use "go
get" to fetch app dependencies.

With the recent release of App Engine 1.8.8 we are pleased to announce more
improvements to the developer experience for Go on App Engine.

* The goapp tool

The Go App Engine SDK now includes the "goapp" tool, an App Engine-specific
version of the "go" tool. The new name permits users to keep both the regular
"go" tool and the "goapp" tool in their system PATH.

In addition to the existing "go" tool [[https://golang.org/cmd/go/][commands]],
the "goapp" tool provides new commands for working with App Engine apps.
The "[[https://developers.google.com/appengine/docs/go/tools/devserver][goapp serve]]"
command starts the local development server and the
"[[https://developers.google.com/appengine/docs/go/tools/uploadinganapp][goapp deploy]]"
command uploads an app to App Engine.

The main advantages offered by the "goapp serve" and "goapp deploy" commands
are a simplified user interface and consistency with existing commands like
"go get" and "go fmt".
For example, to run a local instance of the app in the current directory, run:

	$ goapp serve

To upload it to App Engine:

	$ goapp deploy

You can also specify the Go import path to serve or deploy:

	$ goapp serve github.com/user/myapp

You can even specify a YAML file to serve or deploy a specific
[[https://developers.google.com/appengine/docs/go/modules/][module]]:

	$ goapp deploy mymodule.yaml

These commands can replace most uses of `dev_appserver.py` and `appcfg.py`,
although the Python tools are still available for their less common uses.

* Local unit testing

The Go App Engine SDK now supports local unit testing, using Go's native
[[https://developers.google.com/appengine/docs/go/tools/localunittesting][testing package]]
and the "[[https://golang.org/cmd/go/#hdr-Test_packages][go test]]" command
(provided as "goapp test" by the SDK).

Furthermore, you can now write tests that use App Engine services.
The [[https://developers.google.com/appengine/docs/go/tools/localunittesting#Go_Introducing_the_aetest_package][aetest package]]
provides an appengine.Context value that delegates requests to a temporary
instance of the development server.

For more information about using "goapp test" and the aetest package, see the
[[https://developers.google.com/appengine/docs/go/tools/localunittesting][Local Unit Testing for Go documentation]].
Note that the aetest package is still in its early days;
we hope to add more features over time.

* Better concurrency support

It is now possible to configure the number of concurrent requests served by
each of your app's dynamic instances by setting the
[[https://developers.google.com/appengine/docs/go/modules/#max_concurrent_requests][`max_concurrent_requests`]] option
(available to [[https://developers.google.com/appengine/docs/go/modules/#automatic_scaling][Automatic Scaling modules]] only).

Here's an example `app.yaml` file:

	application: maxigopher
	version: 1
	runtime: go
	api_version: go1
	automatic_scaling:
	  max_concurrent_requests: 100

This configures each instance of the app to serve up to 100 requests
concurrently (up from the default of 10). You can configure Go instances to
serve up to a maximum of 500 concurrent requests.

This setting allows your instances to handle more simultaneous requests by
taking advantage of Go's efficient handling of concurrency, which should yield
better instance utilization and ultimately fewer billable instance hours.

* Conclusion

With these changes Go on App Engine is more convenient and efficient than ever,
and we hope you enjoy the improvements. Please join the
[[http://groups.google.com/group/google-appengine-go/][google-appengine-go group]]
to raise questions or discuss these changes with the engineering team and the
rest of the community.
