diff options
Diffstat (limited to 'content')
-rw-r--r-- | content/appengine-go111.article | 76 | ||||
-rw-r--r-- | content/appengine/main.go | 23 |
2 files changed, 99 insertions, 0 deletions
diff --git a/content/appengine-go111.article b/content/appengine-go111.article new file mode 100644 index 0000000..b2fbb78 --- /dev/null +++ b/content/appengine-go111.article @@ -0,0 +1,76 @@ +Announcing App Engine’s New Go 1.11 Runtime +16 Oct 2018 +Tags: appengine + +Eno Compton + +Tyler Bui-Palsulich + +* Background + +[[https://cloud.google.com/appengine/][App Engine]] launched +[[https://blog.golang.org/go-and-google-app-engine][experimental support for Go]] +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 +[[https://cloud.google.com/blog/products/application-development/go-1-11-is-now-available-on-app-engine][announcing a new Go 1.11 runtime]] +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. +[[https://cloud.google.com/appengine/docs/standard/go111/specifying-dependencies][Specifying Dependencies]] +describes how the new runtime +supports [[https://golang.org/cmd/go/#hdr-Vendor_Directories][vendoring]] and +[[https://golang.org/doc/go1.11#modules][modules]] (experimental) for dependency +management. + +Along with [[https://twitter.com/kelseyhightower/status/1035278586754813952][Cloud Functions support for Go]] +(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 +[[https://cloud.google.com/appengine/docs/standard/go111/specifying-dependencies][experimental support]] +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 [[GCP][https://cloud.google.com]]. +- [[https://cloud.google.com/resource-manager/docs/creating-managing-projects][Create a project]]. +- Install the [[https://cloud.google.com/sdk/][Cloud 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 +[[https://cloud.google.com/free/][free tier]]. Check out the +[[https://cloud.google.com/appengine/docs/standard/go111/building-app/][getting started guide]] +or the +[[https://cloud.google.com/appengine/docs/standard/go111/go-differences][migration guide]] +and deploy an app to the new runtime today!
\ No newline at end of file diff --git a/content/appengine/main.go b/content/appengine/main.go new file mode 100644 index 0000000..ac8feda --- /dev/null +++ b/content/appengine/main.go @@ -0,0 +1,23 @@ +// This server can run on App Engine. +package main + +import ( + "fmt" + "log" + "net/http" + "os" +) + +func main() { + port := os.Getenv("PORT") + if port == "" { + port = "8080" + } + http.HandleFunc("/", hello) + + log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", port), nil)) +} + +func hello(w http.ResponseWriter, r *http.Request) { + w.Write([]byte("Hello, 世界")) +} |