Go On Google App Engine
As I write this at the end of March 2019, I’m just learning how to write Go, specifically in the context of services running on Google App Engine.
Here are my notes and research on the topic.
Go on App Engine has changed
Okay, so I haven’t used Go on App Engine before, but it is clear that a big shift happened in October 2018, when the Go 2nd generation runtime went live. This shift in runtime means that we can use whatever Go packages we want, and structure things how we wish.
There are a bunch of differences to be aware of, and it seems like some of the docs/tools might be out of date.
Testing
Tucked away in this GitHub issue comment is a collection of links to testing libraries for Google Cloud.
- Lightweight in-memory PubSub fake
- gRPC replay tool (for clients other than storage and bigquery)
- HTTP replay tool (for storage and bigquery)
- Interface packages for mocking Storage and BigQuery (part of google-cloud-go-testing)
No gRPC
It would be nice if our services could communicate with gRPC, but it turns out that they currently (March 2019) can’t. gRPC servers require HTTP/2 and App Engine Standard only supports HTTP/1.1 (our users can talk to the servers with HTTP/2, but our App Engine services are limited to 1.1).
Note that this is specifically a problem with serving gRPC. Making gRPC requests should work just fine.