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