Go docs
Golang-Syd, Oct 17, 2012

Rob Pike
Google, Inc.
https://go.dev

* Documentation

* Text

There are many ways to show documentation as text

* Man pages: Unix 1st Edition, 1971

.image go-docs/seek.png

* Man pages: Apple OS X 10.8, 2012

.image go-docs/lseek.png

* Javadoc 1996+

.image go-docs/javadoc.png

* Javadoc 1996+

.image go-docs/javadoc1.png

* Godoc 2009+

.image go-docs/godoc.png

* Godoc 2009+

.image go-docs/godoc1.png

* Godoc

.link /pkg/utf16 go.dev/pkg/utf16

* blog.golang.org

.image go-docs/blog.png

* Code walks

.image go-docs/codewalk.png

* Community contributions

* Go wiki

.link /wiki go.dev/wiki

.image go-docs/gowiki.png

* Gopkgdoc

.link http://go.pkgdoc.org

.image go-docs/gopkgdoc.png

* Gopkgdoc

.link http://go.pkgdoc.org/code.google.com/p/goauth2/oauth

* Go By Example

.link https://gobyexample.com

.image go-docs/gobyexample.png

* Go By Example

.link https://gobyexample.com/timeouts

* Talks

* Presentations

We give a lot of talks.

Most of the tools for presentations focus on style, not ease of creation.

* Present

In the `go.talks` repo, have a new tool: `present`.

	go get code.google.com/p/go.talks/present

- Simple
- Easy to use
- Easy, smooth to present

Took about an hour to put this talk together.

Docs:

.link http://go.pkgdoc.org/code.google.com/p/go.talks/present

* Input for the previous slide

.code go-docs.slide /^\* Present$/,/^\.link/

* Input for the previous slide redux

.code go-docs.slide /^\*.*previous/,/^\.code/

* Revenge of the input for the the previous slide

.code go-docs.slide /^\*.*redux/,/^\.code/


* Many choices

Lots of presentations, different styles.

* Fatal flaw

They all have code.

Can't execute the code!

Want to edit and play.

* The playground

.image go-docs/play.png

* Can run code from the browser

.link /play/ go.dev/play

* The tour

.image go-docs/tour.png

* Can run code from the browser

.link /tour/ go.dev/tour

* Use this technology

Want to embed the playground technology in the other media.

Triggering example: Go Concurrency Patterns, Google I/O, 2012

Needed to demonstrate concurrency and the passage of time.

* Go Concurrency Patterns

An extract from the talk.

* Multiplexing

These programs make Joe and Ann count in lockstep.
We can instead use a fan-in function to let whosoever is ready talk.

.code go-docs/faninboring.go /START3/,/STOP3/
.play go-docs/faninboring.go /START1/,/STOP1/

* .code and .play

Input for the previous slide:

.code go-docs.slide /^\* Multiplexing/,/^.play/

* faninboring.go (I)

	package main

	import (
		"fmt"
		"math/rand"
		"time"
	)

	// START1 OMIT
	func main() {
		c := fanIn(boring("Joe"), boring("Ann")) // HL
		for i := 0; i < 10; i++ {
			fmt.Println(<-c) // HL
		}
		fmt.Println("You're both boring; I'm leaving.")
	}
	// STOP1 OMIT

* faninboring.go (II)

	// START2 OMIT
	func boring(msg string) <-chan string { // Returns receive-only channel of strings. // HL
		c := make(chan string)
		go func() { // We launch the goroutine from inside the function. // HL
			for i := 0; ; i++ {
				c <- fmt.Sprintf("%s: %d", msg, i)
				time.Sleep(time.Duration(rand.Intn(2e3)) * time.Millisecond)
			}
		}()
		return c // Return the channel to the caller. // HL
	}
	// STOP2 OMIT


	// START3 OMIT
	func fanIn(input1, input2 <-chan string) <-chan string { // HL
		c := make(chan string)
		go func() { for { c <- <-input1 } }() // HL
		go func() { for { c <- <-input2 } }() // HL
		return c
	}
	// STOP3 OMIT

* .code and .play again

The input for the Multiplexing slide again:

.code go-docs.slide /^\* Multiplexing/,/^.play/

* Multiplexing again

These programs make Joe and Ann count in lockstep.
We can instead use a fan-in function to let whosoever is ready talk.

.code go-docs/faninboring.go /START3/,/STOP3/
.play go-docs/faninboring.go /START1/,/STOP1/

* Executable documentation

* Plans

Deploy executable examples throughout:

- godoc (already done)
- blog
- code walks
- Go By Example
- wiki

.link /pkg/strings/#example_Contains go.dev/pkg/strings/#example_Contains
