diff options
Diffstat (limited to 'content')
-rw-r--r-- | content/appengine-dec2013.article | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/content/appengine-dec2013.article b/content/appengine-dec2013.article new file mode 100644 index 0000000..99a4651 --- /dev/null +++ b/content/appengine-dec2013.article @@ -0,0 +1,109 @@ +Improvements to Go on App Engine +13 Dec 2013 + +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 [[http://golang.org/cmd/go/][go tool]] and a +[[http://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 [[http://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 "[[http://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. |