| Go docs |
| Golang-Syd, Oct 17, 2012 |
| |
| Rob Pike |
| Google, Inc. |
| @rob_pike |
| http://golang.org/s/plusrob |
| http://golang.org |
| |
| * 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 http://golang.org/pkg/utf16 |
| |
| * blog.golang.org |
| |
| .image go-docs/blog.png |
| |
| * Code walks |
| |
| .image go-docs/codewalk.png |
| |
| * Community contributions |
| |
| * Go wiki |
| |
| .link http://golang.org/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 http://play.golang.org |
| |
| * The tour |
| |
| .image go-docs/tour.png |
| |
| * Can run code from the browser |
| |
| .link http://tour.golang.org |
| |
| * 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 http://golang.org/pkg/strings/#example_Contains |