Go for Java Programmers

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

* Video

This talk was presented at [[http://javasig.com][NYJavaSIG]] on April 23, 2015.

.link https://www.youtube.com/watch?v=_c_tQ6_3cCg Watch the talk on YouTube

* Outline

1. What is Go, and who uses it?
2. Comparing Go and Java
3. Examples
4. Concurrency
5. Tools

# The next several slides are from rsc's 2013/distsys and 2015/mit talks.

* What is Go?

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

.link http://golang.org

* 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.

* 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?

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

Public examples:

- SPDY proxy for Chrome on mobile devices

.image go-for-java-programmers/spdy.png 400 _

* Who uses Go at Google?

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

Public examples:

- SPDY proxy for Chrome on mobile devices
- Download server for Chrome, ChromeOS, Android SDK, Earth, etc.
- YouTube Vitess MySQL balancer

The target is networked servers, but it's a great general-purpose language.

* Who uses Go besides Google?

.link http://golang.org/wiki/GoUsers

Apcera, Bitbucket, bitly, Canonical, CloudFlare, Core OS, Digital Ocean, Docker, Dropbox, Facebook, Getty Images, GitHub, Heroku, Iron.io, Kubernetes, Medium, MongoDB services, Mozilla services, New York Times, pool.ntp.org, Secret, SmugMug, SoundCloud, Stripe, Square, Thomson Reuters, Tumblr, ...

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

* Comparing Go and Java

* Go and Java have much in common

- 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

- Programs compile to machine code.  There's no VM.
- Statically linked binaries
- Control over memory layout
- 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 constructors
- No inheritance
- 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)]]
- [[http://talks.golang.org/2012/splash.article][Go at Google: Language Design in the Service of Software Engineering (Pike, 2012)]]

* Examples

* Go looks familiar to Java programmers

Main.java

.code go-for-java-programmers/hello/Main.java

hello.go

.play go-for-java-programmers/hello/hello.go

* Hello, web server

.play go-for-java-programmers/hello/server.go

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

* Example: Google Search frontend

.image go-for-java-programmers/frontend-screenshot.png _ 1000

.play go-for-java-programmers/frontend.go /func main/,/func handleSearch/

* Validate the query

.code go-for-java-programmers/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

.code go-for-java-programmers/frontend.go /Run the Google search/,/ENDSEARCH/

`Search` returns two values, a slice of results and an error.

  func Search(query string) ([]Result, 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.

* Render the search results

.code go-for-java-programmers/frontend.go /Render the/,/ENDRENDER/

`resultsTemplate.Execute` generates HTML and writes it 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 go-for-java-programmers/frontend.go /A Result contains/,/\)\)/

* Issue the query to the Google Search API

.code go-for-java-programmers/frontend.go /func Search/,/resp.Body.Close/

The `defer` statement arranges for `resp.Body.Close` to run when `Search` returns.

* Parse the JSON response into a Go struct

.link https://developers.google.com/web-search/docs/#fonje

.code go-for-java-programmers/frontend.go /var jsonResponse/,/^}/

* That's it for the frontend

All the packages are from the standard library:

  import (
  	"encoding/json"
  	"fmt"
  	"html/template"
  	"log"
  	"net/http"
  	"net/url"
  	"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.

"Don't communicate by sharing memory, share memory by communicating."

*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 n := <-in:
    fmt.Println("received", n)
  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 Search function with a random timeout up to 100ms.

.code go-for-java-programmers/google-serial.go /START2/,/STOP2/

* Google Search: Test the framework

.play go-for-java-programmers/google-serial.go /func.main/,/}/

* Google Search (serial)

The Google function takes a query and returns a slice of Results (which are just strings).

Google invokes Web, Image, and Video searches serially, appending them to the results slice.

.play go-for-java-programmers/google-serial.go /START1/,/STOP1/

* 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`.

.play go-for-java-programmers/google-parallel.go /Google/,/^}/

* Google Search (timeout)

Don't wait for slow servers.

No locks.  No condition variables.  No callbacks.

.play go-for-java-programmers/google-timeout.go /START/,/STOP/

* 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 go-for-java-programmers/first.go /START1/,/STOP1/

* Using the First function

.play go-for-java-programmers/first.go /START2/,/STOP2/

* Google Search (replicated)

Reduce tail latency using replicated search servers.

.play go-for-java-programmers/google-first.go /START/,/STOP/

* And still…

No locks.  No condition variables.  No callbacks.

* Summary

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.

* Tools

* Go has great tools

- gofmt and goimports
- the go tool
- godoc
- IDE and editor support

The language is designed for tooling.

* gofmt and goimports

Gofmt formats code automatically.  No options.

Goimports updates import statements based on your workspace.

Most people run these tools on save.

.link http://play.golang.org/p/GPqra77cBK

* The go tool

The go tool builds Go programs from source in a conventional directory layout.
No Makefiles or other configs.

Fetch the `present` tool and its dependencies, build it, and install it:

  % go get golang.org/x/tools/cmd/present

Run it:

  % present

* godoc

Generated documentation for the world's open-source Go code:

.link http://godoc.org

* IDE and editor support

Eclipse, IntelliJ, emacs, vim, many others.

- `gofmt`
- `goimports`
- `godoc` lookups
- code completion
- code navigation

There's no "Go IDE".

Go tools meet you where you are.

* Where to Go next

Take the Go Tour online.

.link http://tour.golang.org

Lots more material.

.link http://golang.org/wiki/Learn

Great community.

.link http://golang.org/project
