| # Announcing App Engine’s New Go 1.11 Runtime | |
| 16 Oct 2018 | |
| Tags: appengine | |
| Summary: Google Cloud is announcing a new Go 1.11 runtime for App Engine, with fewer limits on app structure. | |
| Eno Compton | |
| Tyler Bui-Palsulich | |
| ## | |
| [App Engine](https://cloud.google.com/appengine/) launched | |
| [experimental support for Go](https://blog.golang.org/go-and-google-app-engine) | |
| in 2011. In the subsequent years, the Go community has grown significantly and | |
| has settled on idiomatic | |
| patterns for cloud-based applications. Today, Google Cloud is | |
| [announcing a new Go 1.11 runtime](https://cloud.google.com/blog/products/application-development/go-1-11-is-now-available-on-app-engine) | |
| for the App Engine standard environment that provides all the | |
| power of App Engine—things like paying only for what you use, automatic scaling, | |
| and managed infrastructure—while supporting idiomatic Go. | |
| Starting with Go 1.11, Go on App Engine has no limits on application structure, | |
| supported packages, `context.Context` values, or HTTP clients. Write your Go | |
| application however you prefer, add an `app.yaml` file, and your app is ready | |
| to deploy on App Engine. | |
| [Specifying Dependencies](https://cloud.google.com/appengine/docs/standard/go111/specifying-dependencies) | |
| describes how the new runtime | |
| supports [vendoring](https://golang.org/cmd/go/#hdr-Vendor_Directories) and | |
| [modules](https://golang.org/doc/go1.11#modules) (experimental) for dependency | |
| management. | |
| Along with [Cloud Functions support for Go](https://twitter.com/kelseyhightower/status/1035278586754813952) | |
| (more on that in a future post), App Engine provides a compelling way to run Go | |
| code on Google Cloud Platform (GCP) with no concern for the underlying | |
| infrastructure. | |
| Let’s take a look at creating a small application for App Engine. For the | |
| example here, we assume a `GOPATH`-based workflow, although Go modules have | |
| [experimental support](https://cloud.google.com/appengine/docs/standard/go111/specifying-dependencies) | |
| as well. | |
| First, you create the application in your `GOPATH`: | |
| .code appengine/main.go | |
| The code contains an idiomatic setup for a small HTTP server that responds with | |
| “Hello, 世界.” If you have previous App Engine experience, you’ll notice the | |
| absence of any call to `appengine.Main()`, which is now entirely optional. | |
| Furthermore, the application code is completely portable—there are no ties to | |
| the infrastructure that your application is deployed on. | |
| If you need to use external dependencies, you can add those dependencies to a | |
| `vendor` directory or to a `go.mod` file, both of which the new runtime | |
| supports. | |
| With the application code complete, create an `app.yaml` file to specify | |
| the runtime: | |
| runtime: go111 | |
| Finally, set your machine up with a Google Cloud Platform account: | |
| - Create an account with [https://cloud.google.com](GCP). | |
| - [Create a project](https://cloud.google.com/resource-manager/docs/creating-managing-projects). | |
| - Install the [Cloud SDK](https://cloud.google.com/sdk/) on your system. | |
| With all the setup complete, you can deploy using one command: | |
| gcloud app deploy | |
| We think Go developers will find the new Go 1.11 runtime for App Engine an | |
| exciting addition to the available options to run Go applications. There is a | |
| [free tier](https://cloud.google.com/free/). Check out the | |
| [getting started guide](https://cloud.google.com/appengine/docs/standard/go111/building-app/) | |
| or the | |
| [migration guide](https://cloud.google.com/appengine/docs/standard/go111/go-differences) | |
| and deploy an app to the new runtime today! |