aboutsummaryrefslogtreecommitdiff
path: root/content
diff options
context:
space:
mode:
Diffstat (limited to 'content')
-rw-r--r--content/appengine-dec2013.article109
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.