Program your next server in Go

Sameer Ajmani
Manager, Go team
Google
@Sajma
sameer@golang.org

* Video

This talk was presented at the [[http://applicative.acm.org/][ACM Applicative]] conference in New York City on June 1, 2016.

.link https://www.youtube.com/watch?v=5bYO60-qYOI Watch the talk on YouTube

* Outline

1. What is Go, and who uses it?
2. Comparing Go and other languages
3. Code examples
4. Concurrency
5. Getting started

* What is Go?

"Go is an open source programming language that makes it easy to build simple, reliable, and efficient software."

.link / go.dev

* History

Design began in late 2007.

- Robert Griesemer, Rob Pike, and Ken Thompson.
- Ian Lance Taylor and Russ Cox.

Open source since 2009 with a very active community.

Language stable as of Go 1, early 2012.

Go 1.7 is coming this August.

* Why Go?

Go is an answer to problems of scale at Google.

.image ../2012/splash/datacenter.jpg 500 _

* System Scale

- designed to scale to 10⁶⁺ machines
- everyday jobs run on 1000s of machines
- jobs coordinate, interact with others in the system
- lots going on at once

Solution: great support for concurrency

.image ../2012/waza/gophercomplex6.jpg

* A Second Problem: Engineering Scale

In 2011:

- 5000+ developers across 40+ offices
- 20+ changes per minute
- 50% of code base changes every month
- 50 million test cases executed per day
- single code tree

Solution: design the language for large code bases

* Who uses Go at Google?

Hundreds of projects. Thousands of Go programmers. Millions of lines of Go code.

Public examples:

- Flywheel: SPDY proxy for Chrome on mobile devices

.image applicative/spdy.png 400 _

* Who uses Go at Google?

Hundreds of projects. Thousands of Go programmers. Millions of lines of Go code.

Public examples:

- Flywheel: SPDY proxy for Chrome on mobile devices
- dl.google.com: Download server for Chrome, ChromeOS, Android SDK, Earth, etc.
- Vitess: YouTube MySQL balancer
- Seesaw: Linux Virtual Server (LVS) based load balancer
- Lingo: Logs analysis in Go, migrated from Sawzall

The target is networked servers, but Go is a great general-purpose language.

* Who uses Go besides Google?

.link /wiki/GoUsers go.dev/wiki/GoUsers

Aerospike, BBC Worldwide, Bitbucket, Booking.com, Core OS, Datadog, Digital Ocean, Docker, Dropbox, Facebook, Getty Images, GitHub, GOV.UK, Heroku, IBM, Intel, InfluxDB, Iron.io, Kubernetes, Medium, MongoDB, Mozilla services, Netflix, New York Times, pool.ntp.org, Rackspace, Shutterfly, SmugMug, SoundCloud, SpaceX, Square, Stack Exchange, Thomson Reuters Eikon, Tumblr, Twitch, Twitter, Uber, VMWare ...

.image ../2014/state-of-go/bus.jpg 300 _

* Comparing Go and other languages

* "Go: 90% Perfect, 100% of the time" -bradfitz, 2014

.image ../2014/gocon-tokyo/funfast.svg

# Brad Fitzpatrick, GoCon Tokyo, May 2014

* Go has much in common with Java

- C family (imperative, braces)
- Statically typed
- Garbage collected
- Memory safe (nil references, runtime bounds checks)
- Variables are always initialized (zero/nil/false)
- Methods
- Interfaces
- Type assertions (`instanceof`)
- Reflection

* Go differs from Java in several ways

Fast, efficient for computers:

- Programs compile to machine code.  There's no VM.
- Control over memory layout, fewer indirections

Fun, fast for humans:

- Simple, concise syntax
- Statically linked binaries
- Function values and lexical closures
- Built-in strings (UTF-8)
- Built-in generic maps and arrays/slices
- Built-in concurrency

* Go intentionally leaves out many features

- No classes
- No inheritance
- No constructors
- No `final`
- No exceptions
- No annotations
- No user-defined generics

* Why does Go leave out those features?

Clarity is critical.

When reading code, it should be clear what the program will do.

When writing code, it should be clear how to make the program do what you want.

Sometimes this means writing out a loop instead of invoking an obscure function.

(Don't DRY out.)

For more background on design:

- [[http://commandcenter.blogspot.com/2012/06/less-is-exponentially-more.html][Less is exponentially more (Pike, 2012)]]
- [[/talks/2012/splash.article][Go at Google: Language Design in the Service of Software Engineering (Pike, 2012)]]

* Code examples

* Go looks familiar

Hello, world!

.play applicative/hello/hello.go

* Hello, web server

.play applicative/hello/server.go

Types follow names in declarations.
Exported names are Capitalized.  Unexported names are not.

* Example: Google Search frontend

.play applicative/frontend.go /func main/,/func handleSearch/

.link http://localhost:8080/search
.link http://localhost:8080/search?q=golang
.link http://localhost:8080/search?q=golang&output=json
.link http://localhost:8080/search?q=golang&output=prettyjson

* Validate the query

.code applicative/frontend.go /func handleSearch/,/ENDQUERY/

`FormValue` is a method on the type `*http.Request`:

  package http
  type Request struct {...}
  func (r *Request) FormValue(key string) string {...}

`query`:=`req.FormValue("q")` initializes a new variable `query` with
the type of the expression on the right hand side, `string`.

* Fetch the search results

  import "golang.org/x/talks/content/2016/applicative/google"

.code applicative/frontend.go /Run the Google search/,/ENDSEARCH/

`Search` returns two values, a slice of results and an error.
The results are valid only if the error is nil.

  type error interface {
      Error() string // a useful human-readable error message
  }

Errors may contain additional information, accessed via type assertions.

* Structure the search results

.code applicative/frontend.go /Create the structured/,/ENDRESPONSE/

The `response` type is defined locally within `handleSearch`.

The `google.Result` type is exported from package `google`:

  package google

  type Result struct { Title, URL string }

The `resp` variable is initialized to a `response` value using a composite struct literal.


* Render the search results

.code applicative/frontend.go /Render the response/,/ENDRENDER/

Each case writes bytes to an `io.Writer`:

  type Writer interface {
          Write(p []byte) (n int, err error)
  }

`http.ResponseWriter` implements the `io.Writer` interface.

* HTML templates operate on Go values

.play applicative/frontend.go /var responseTemplate/,/\)\)/

.image applicative/frontend-screenshot.png _ 900

* That's it for the search handler

All the packages are from the standard library:

  import (
      "encoding/json"
      "fmt"
      "html/template"
      "log"
      "net/http"
      "time"
  )

Go servers scale well: each request runs in its own _goroutine_.

Let's talk about concurrency.

* Communicating Sequential Processes (Hoare, 1978)

Concurrent programs are structured as independent processes that
execute sequentially and communicate by passing messages.

Sequential execution is easy to understand.  Async callbacks are not.

*Go*primitives:* goroutines, channels, and the `select` statement.

* Goroutines

Goroutines are like lightweight threads.

They start with tiny stacks and resize as needed.

Go programs can have hundreds of thousands of them.

Start a goroutine using the `go` statement:

  go f(args)

The Go runtime schedules goroutines onto OS threads.

Blocked goroutines don't use a thread.

* Channels

Channels provide communication between goroutines.

  c := make(chan string)

  // goroutine 1
  c <- "hello!"

  // goroutine 2
  s := <-c
  fmt.Println(s) // "hello!"

* Select

A `select` statement blocks until communication can proceed.

  select {
  case x := <-in:
    fmt.Println("received", x)
  case out <- v:
    fmt.Println("sent", v)
  }

Only the selected case runs.

* Example: Google Search (backend)

Q: What does Google search do?

A: Given a query, return a page of search results (and some ads).

Q: How do we get the search results?

A: Send the query to Web search, Image search, YouTube, Maps, News, etc., then mix the results.

How do we implement this?

* Google Search: A fake framework

We can simulate a back end search with a random timeout up to 100ms.

.code applicative/google/fake.go /START2/,/STOP2/

* Google Search: Test the framework

.play applicative/google-serial.go /func.main/,/}/ HLsearch

* Google Search (serial)

The `Search` function takes a query and returns a slice of `Results`.

Search invokes the Web, Image, and Video searches serially, then constructs the `results` slice.

.code applicative/google/serial.go /func Search/,/^}/
.play applicative/google-serial.go /google.Search/

* Google Search (parallel)

Run the Web, Image, and Video searches concurrently, and wait for all results.

The `func` literals are closures over `query` and `c`.

.code applicative/google/parallel.go /func Search/,/^}/
.play applicative/google-parallel.go /google.Search/

* Google Search (timeout)

Don't wait for slow servers.

.code applicative/google/timeout.go /func Search/,/STOP/
.play applicative/google-timeout.go /google.Search/ HLsearch

* Avoid timeout

Q: How do we avoid discarding results from slow servers?

A: Replicate the servers.  Send requests to multiple replicas, and use the first response.

.code applicative/google/first.go /func First/,/^}/

* Using the First function

.play applicative/first.go /func main/,/^}/

* Google Search (replicated)

Reduce tail latency using replicated back ends.

.code applicative/google/first.go /START/,/STOP/
.play applicative/google-replicated.go /google.Search/

Go functions have simple, synchronous signatures.
The use of concurrency is encapsulated.

* What just happened?

In just a few simple transformations we used Go's concurrency primitives to convert a

- slow
- sequential
- failure-sensitive

program into one that is

- fast
- concurrent
- replicated
- robust.

No locks. No condition variables. No futures. No callbacks.

* Getting started

* You're interested in Go.  What next?

Take the Go Tour online.

.link /tour/ go.dev/tour

Then go deeper ...

.link /wiki/Learn go.dev/wiki/Learn

Still interested?

Run a pilot project.

* Run a pilot project

Reduces the cost & risks of switching to a new technology,
while helping your organization discover the benefits.

1. Choose something small to write in Go (e.g., a microservice)
2. Build a prototype with a friend

- Find the libraries you need
- Integrate with editors & IDEs
- Integrate with build & test & deploy
- Learn how to debug & profile your program

3. Compare Go to what you use today

- Isolate the language change; try not to change anything else.

4. *Present*results*to*the*team*

* Go is designed for tooling

Go tools meet you where you are.  There's no one "Go IDE".

- IDE & editor integration: Eclipse, IntelliJ, VisualStudio, SublimeText, emacs, vim, ...
- [[/play/][go.dev/play]]: online playground
- `gofmt`: automatic formatting
- `goimports`: automatic updates of package imports
- `gocode`: automatic completion
- the `go` tool: automatic fetch & build
- `guru`: static analysis, bug finding, code navigation
- [[https://pkg.go.dev][pkg.go.dev]]: open source package index and docs

* Where to Go next

Take the Go Tour online.

.link /tour/ go.dev/tour

Lots more material.

.link /wiki/Learn go.dev/wiki/Learn

Great community.

.link /project go.dev/project
