# 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!
