From 24cea0199b63c8a665541a7e3b2e8891fd37323f Mon Sep 17 00:00:00 2001 From: Vincent Batts Date: Mon, 5 Dec 2016 10:44:45 -0500 Subject: [PATCH] 2013-03: adding an old learning lunch --- 2013/03-golang-learning-lunch/1-hello/main.go | 8 + .../10-abstracts/main.go | 39 ++ .../03-golang-learning-lunch/11-defer/main.go | 12 + .../12-go-func/main.go | 30 ++ .../13-blank-var/main.go | 14 + .../14-ngoroutines/main.go | 20 + 2013/03-golang-learning-lunch/2-hello/main.go | 13 + .../2013-03-27-go-ll.slide | 350 ++++++++++++++++++ .../2013-03-27-go-ll/gopher.jpg | Bin 0 -> 86779 bytes .../03-golang-learning-lunch/3-struct/main.go | 27 ++ .../4-struct-func/main.go | 46 +++ 2013/03-golang-learning-lunch/5-neats/main.go | 24 ++ .../5-neats/person.go | 34 ++ .../6-inheritance/main.go | 40 ++ 2013/03-golang-learning-lunch/7-prof/main.go | 18 + .../8-io-chain/main.go | 22 ++ .../9-http-srv/main.go | 21 ++ 17 files changed, 718 insertions(+) create mode 100644 2013/03-golang-learning-lunch/1-hello/main.go create mode 100644 2013/03-golang-learning-lunch/10-abstracts/main.go create mode 100644 2013/03-golang-learning-lunch/11-defer/main.go create mode 100644 2013/03-golang-learning-lunch/12-go-func/main.go create mode 100644 2013/03-golang-learning-lunch/13-blank-var/main.go create mode 100644 2013/03-golang-learning-lunch/14-ngoroutines/main.go create mode 100644 2013/03-golang-learning-lunch/2-hello/main.go create mode 100644 2013/03-golang-learning-lunch/2013-03-27-go-ll.slide create mode 100644 2013/03-golang-learning-lunch/2013-03-27-go-ll/gopher.jpg create mode 100644 2013/03-golang-learning-lunch/3-struct/main.go create mode 100644 2013/03-golang-learning-lunch/4-struct-func/main.go create mode 100644 2013/03-golang-learning-lunch/5-neats/main.go create mode 100644 2013/03-golang-learning-lunch/5-neats/person.go create mode 100644 2013/03-golang-learning-lunch/6-inheritance/main.go create mode 100644 2013/03-golang-learning-lunch/7-prof/main.go create mode 100644 2013/03-golang-learning-lunch/8-io-chain/main.go create mode 100644 2013/03-golang-learning-lunch/9-http-srv/main.go diff --git a/2013/03-golang-learning-lunch/1-hello/main.go b/2013/03-golang-learning-lunch/1-hello/main.go new file mode 100644 index 0000000..413665a --- /dev/null +++ b/2013/03-golang-learning-lunch/1-hello/main.go @@ -0,0 +1,8 @@ +package main + +import "fmt" + +func main() { + fmt.Println("Hello World!") +} + diff --git a/2013/03-golang-learning-lunch/10-abstracts/main.go b/2013/03-golang-learning-lunch/10-abstracts/main.go new file mode 100644 index 0000000..5ec464c --- /dev/null +++ b/2013/03-golang-learning-lunch/10-abstracts/main.go @@ -0,0 +1,39 @@ +package main + +func main() { + jeep := Hummer{} + h(jeep) + jeep.Where() + c(jeep) +} + + +type Car interface { + Honk() + Crank() +} + +func c(some interface{}) { + some.(Car).Crank() +} +func h(some interface{}) { + some.(Car).Honk() +} + +// Implement the Car interface +type Hummer struct { + Car +} + +func (h Hummer) Honk() { + println("BEEP BEEP") +} + +func (h Hummer) Where() { + println("Who's got the keys to the jeep?") +} + +func (h Hummer) Crank() { + println("VROOOOOOM") +} + diff --git a/2013/03-golang-learning-lunch/11-defer/main.go b/2013/03-golang-learning-lunch/11-defer/main.go new file mode 100644 index 0000000..fe04d0a --- /dev/null +++ b/2013/03-golang-learning-lunch/11-defer/main.go @@ -0,0 +1,12 @@ +package main + +import "fmt" + +func main() { + // START OMIT + for i := 0; i < 5; i++ { + defer fmt.Printf("%d ", i) + } + fmt.Println("HOOTY HOO!") + // STOP OMIT +} diff --git a/2013/03-golang-learning-lunch/12-go-func/main.go b/2013/03-golang-learning-lunch/12-go-func/main.go new file mode 100644 index 0000000..4a66244 --- /dev/null +++ b/2013/03-golang-learning-lunch/12-go-func/main.go @@ -0,0 +1,30 @@ +package main + +import ( + "fmt" + "time" +) + +// START OMIT +func DelayedHello() { + time.Sleep(3 * time.Second) + fmt.Printf("%d: Hello!\n", time.Now().Unix()) +} + +func main() { + go DelayedHello() + go DelayedHello() + go func() { + time.Sleep(3 * time.Second) + fmt.Printf("%d: Hello!\n", time.Now().Unix()) + }() + + fmt.Printf("%d: Is there anybody in there?!\n", time.Now().Unix()) + + for i := 0; i < 5; i++ { + fmt.Printf("%d: .\n", time.Now().Unix()) + time.Sleep(time.Second) + } +} +// STOP OMIT + diff --git a/2013/03-golang-learning-lunch/13-blank-var/main.go b/2013/03-golang-learning-lunch/13-blank-var/main.go new file mode 100644 index 0000000..7b6d367 --- /dev/null +++ b/2013/03-golang-learning-lunch/13-blank-var/main.go @@ -0,0 +1,14 @@ +package main + +func main() { + // START OMIT + words := []string{"cow","goat","sheep","horse","chicken"} + for i := range words { + println(words[i]) + } + for _, word := range words { + println(word) + } + // STOP OMIT +} + diff --git a/2013/03-golang-learning-lunch/14-ngoroutines/main.go b/2013/03-golang-learning-lunch/14-ngoroutines/main.go new file mode 100644 index 0000000..0d7d319 --- /dev/null +++ b/2013/03-golang-learning-lunch/14-ngoroutines/main.go @@ -0,0 +1,20 @@ +package main + +// START OMIT +var ngoroutine = 100000 + +func f(left, right chan int) { left <- 1 + <-right } + +func main() { + leftmost := make(chan int) + var left, right chan int = nil, leftmost + for i := 0; i < ngoroutine; i++ { + left, right = right, make(chan int) + go f(left, right) + } + right <- 0 // bang! + x := <-leftmost // wait for completion + println(x) // 100000 +} + +// STOP OMIT diff --git a/2013/03-golang-learning-lunch/2-hello/main.go b/2013/03-golang-learning-lunch/2-hello/main.go new file mode 100644 index 0000000..ec102fa --- /dev/null +++ b/2013/03-golang-learning-lunch/2-hello/main.go @@ -0,0 +1,13 @@ +package main + +import "fmt" + +func main() { + var words string + + words = "Hello World!" + + for i := 0; i < 10; i++ { + fmt.Printf("%s\n", words) + } +} diff --git a/2013/03-golang-learning-lunch/2013-03-27-go-ll.slide b/2013/03-golang-learning-lunch/2013-03-27-go-ll.slide new file mode 100644 index 0000000..635892a --- /dev/null +++ b/2013/03-golang-learning-lunch/2013-03-27-go-ll.slide @@ -0,0 +1,350 @@ +Golang: an introduction + +27 Mar 2013 + +# Go is a general-purpose language that bridges the gap between efficient +# statically typed languages and productive dynamic language. But it’s not just +# the language that makes Go special – Go has broad and consistent standard +# libraries and powerful but simple tools. +# +# This talk gives an introduction to Go + +# Please join Vincent Batts, Senior Software Application Engineer in the IT-Eng tower, for an overview of the Go programming language. +# +# Audience: Hackers, doodlers, early adopters, linguists +# Agenda: +# * Overview of just what the language is and why should anyone care? +# * What makes it better or worse than other options. +# * Is it production ready?! +# * Common go-idioms +# * Other questions folks have relevant to Red Hat IT ? +# +# Background: +# The Go programming language is an open source project to make programmers more productive. +# Go is expressive, concise, clean, and efficient. Its concurrency mechanisms make it easy to write programs that get the most out of multicore and networked machines, while its novel type system enables flexible and modular program construction. Go compiles quickly to machine code yet has the convenience of garbage collection and the power of run-time reflection. It's a fast, statically typed, compiled language that feels like a dynamically typed, interpreted language. + +Vincent Batts +Red Hat, Inc. +@vbatts +vbatts@redhat.com +http://youtu.be/bIs15Km9v4k + +* Google Motivation +- Efficiency +- Safety +- Concurrency +- Scalabilty +- Fast Dev Cycle +- No Surprises +- ... Such a cute mascot + +* gophers +# SO DARN CUTE +.image 2013-03-27-go-ll/gopher.jpg + +* Benefits +- Spec driven + +.link http://golang.org/ref/spec + +- Changes must have consenus +# agreement of the different world views + +* Hello, go + +.play 1-hello/main.go + +* Layout Overview + +- packages (namespaces) +# no need for central trust model +# not terribly unlike python +- remote packages include host/path +# we'll touch back on this on the go tool +- packages hold types, constants, variables, structs and func's +- packages are grouped by directory (all *.go siblings are grouped) +# we'll get back to testing +- Capitalization determines visibility: `Foo` is exported, `foo` is not + +* Tooling + +* Compilers +- gc - Google Go Compiler + - f19+ 'golang' + - EPEL soon... +# either from source or there is an RPM build +# +# COMPILES SO FAST +# +# 100k lines of code compiles in 2min +# (the equivalent C++ took greater than 1hr) +# +- gccgo - GCC 4.7.1 and newer + - f16+ +# fedora 16+ and RHEL7 + +* go tool +the defacto all-the-things tool +# wraps up testing, building, docs and libraries + +Compile a single-file program + + $ go build hello.go + +Compile and run a single-file program + + $ go run hello.go + +List libraries available + + $ go list all + +See documentation + + $ go doc io/ioutil + +* go tool + +Cleanup code + + $ go fmt main.go + +Test code + + $ go test main_test.go + +Check code for suspicious constructs or inconsistencies + + $ go vet main.go + +* go tool + +Compile out the current directory's *.go + + $ cd my-project/ + $ go build + $ ./my-project + +Test the current directory's *.go + + $ cd my-project/ + $ go test + +* Standard libraries +# are freaking _solid_ +# +# Very well documented +# +# and easy to read + +* basic types + +.link http://golang.org/ref/spec#Types + +- Familiar C-types +- But Strings too! +# common and comfortable enough, without having to think of strings +# as *char. We have []byte for that now +- Slices - static and dynamic arrays + +* structs and pointers + + type Person struct { + Name string + Dob *time.Time + } + +.play ./3-struct/main.go /START/,/STOP/ + +* structs and pointers + + func (p *Person) ComeToLife() { + t := time.Now() + p.Dob = &t + p.State = NEW_BORN + } + +.play ./4-struct-func/main.go /START/,/STOP/ + +* Why should I care? +# Perhaps you shouldn't care, if you ask this ... :-) + +Why Another Language? +# Surprisingly, much of the concepts of Golang are _not_ "new" +# concepts were taken from Ada, and heavily succeeds from plan9 and erlang +# (ken thompson is one of the core developers) +# +# like so many businesses they have a need for business logic/ performance +# but also the speed and ease of getting new features/apps deployed +# +# This often splits them over two languages. In google's situation, the need +# for a single language came from their heavy use of C and Python. +# +# Compile times! none of the ifdef garb, +# and no shadiness of pre-proccessor, header and linker issues + +Benefits for me? +# That's a big question that would involve a good deal of review +# +# reduced code. logic becomes visible + +Benefits for Red Hat IT? +# Even tougher to say. +# Definitely has benefits for portability, light-stack, speed and stability +# No conversations should be considered, but also should not be ruled out +# for future projects. +# +# Ops/Infra burden. No stack, just land the binary. +# Server needs no additional software, just a bare bones linux box +# +# StatHat +# ruby -> go services find 10x performance increase +# +# IronWorker +# 30 ruby servers -> 2 go servers (just for redundancy) +# + +* Is this production ready?! + +Great question! + +.link https://code.google.com/p/go-wiki/wiki/SuccessStories + +Google uses it +- dl.google.com +- part of Youtube + +.link https://code.google.com/p/vitess/ Youtube - vitess project + + +* Idiomatic + +* Very +- expressive +- predictable +- parsable (gofmt) +- what-you-see-is-what-you-get +# not a bunch of hidden inheritance +# or prototyping +# or code sprawl + + +* Idioms + +- Multiple return values +- Error checking (rather than exception handling) + + fn := "/tmp/this-file.txt" + fh, err := os.Open(fn) + if err != nil { + fmt.Fprintf(os.Stderr, "ERROR: %s failed cause: %s!\n", fn, err) + // ... check for type of error, and do something + } + // ... life goes on + + +* Idioms + +anonymous functions + +.link http://golang.org/doc/effective_go.html#goroutines go routines + +.play 12-go-func/main.go /START/,/STOP/ + + +* Idioms + +.link http://golang.org/doc/effective_go.html#defer Defer +# closing a handle, unlocking a mutex, some stack of operations, etc. + +.play 11-defer/main.go /START/,/STOP/ + +classic file handle situation... made simple + + fh, err := os.Open("foo.txt") + if err != nil { + return "", err + } + defer fh.Close() + // forget about needing to close the file handle + + +* Idioms + +Only what you need + +- import's +# failed compile for including libraries that aren't used +- variables + +.play 13-blank-var/main.go /START/,/STOP/ + + +* Idioms + +.link http://golang.org/doc/effective_go.html#channels Channels +# nice closures + + c := make(chan int) // Allocate a channel. + // Start the sort in a goroutine; when it completes, signal on the channel. + go func() { + list.Sort() + c <- 1 // Send a signal; value does not matter. + }() + doSomethingForAWhile() + <-c // Wait for sort to finish; discard sent value. + + +* channels +- using it for signal catching + + go func() { + c := make(chan os.Signal, 1) + signal.Notify(c, os.Interrupt) + signal.Notify(c, os.Kill) + for sig := range c { + // sig is a ^C, handle it + if sig == os.Interrupt { + log.Println("interrupted ...") + os.Exit(1) + } else if sig == os.Kill { + log.Println("killing ...") + os.Exit(2) + } else { + log.Printf("Not sure what %q is. Quiting", sig) + os.Exit(3) + } + } + }() + + +* concurrency + +.play 14-ngoroutines/main.go /START/,/STOP/ + +* Straight Forward + +.link http://localhost:4000/ Web Server + +.play ./9-http-srv/main.go /START/,/STOP/ + +* Other Questions?? + + +* References + +.link http://golang.org/doc/ + +.link http://golang.org/pkg/ + +.link http://godoc.org/ + +freenode #go-nuts + +.link http://groups.google.com/group/golang-nuts + +.link http://youtu.be/sln-gJaURzk Google I/O 2012 - Meet the Go Team + +.link http://www.miek.nl/projects/learninggo/ Learning Go book (free) + + diff --git a/2013/03-golang-learning-lunch/2013-03-27-go-ll/gopher.jpg b/2013/03-golang-learning-lunch/2013-03-27-go-ll/gopher.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0e886e4387fc3ca90fac119e27178e0841a97be3 GIT binary patch literal 86779 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

GfQLrbINZn4k7UZ%z;xoX*ZYB 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�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 O1!3)#_8O+;)c@JPg#Q2l literal 0 HcmV?d00001 diff --git a/2013/03-golang-learning-lunch/3-struct/main.go b/2013/03-golang-learning-lunch/3-struct/main.go new file mode 100644 index 0000000..d8c9ec1 --- /dev/null +++ b/2013/03-golang-learning-lunch/3-struct/main.go @@ -0,0 +1,27 @@ +package main + +import ( + "fmt" + "time" +) + +type Person struct { + Name string + Dob *time.Time +} + +func main() { + // START OMIT + t, err := time.Parse(time.RFC822, "27 Mar 75 00:00 EST") + if (err != nil) { + fmt.Println(err) + return + } + p := Person{Name: "John Doe", Dob: &t } + fmt.Printf("%q\n", p) + // STOP OMIT + + //fmt.Printf("%s\n", p.Name) + //fmt.Printf("%s\n", p.Dob.String()) +} + diff --git a/2013/03-golang-learning-lunch/4-struct-func/main.go b/2013/03-golang-learning-lunch/4-struct-func/main.go new file mode 100644 index 0000000..3c1eaf1 --- /dev/null +++ b/2013/03-golang-learning-lunch/4-struct-func/main.go @@ -0,0 +1,46 @@ +package main + +import ( + "fmt" + "time" +) + +const ( + IN_UTERO = iota + NEW_BORN + GROWING + LIVING + DYING + DEAD +) + +type Person struct { + Name string + Dob *time.Time + State byte +} + +func (p *Person) DobString() string { + if (p.Dob == nil) { + return "" + } + return p.Dob.String() +} + +func (p *Person) ComeToLife() { + t := time.Now() + p.Dob = &t + p.State = NEW_BORN +} + + +func main() { + // START OMIT + p := Person{Name: "John Doe", State: IN_UTERO} + fmt.Printf("%s, %s\n", p.Name, p.DobString()) + + p.ComeToLife() + fmt.Printf("%s, %s\n", p.Name, p.DobString()) + // STOP OMIT +} + diff --git a/2013/03-golang-learning-lunch/5-neats/main.go b/2013/03-golang-learning-lunch/5-neats/main.go new file mode 100644 index 0000000..674849f --- /dev/null +++ b/2013/03-golang-learning-lunch/5-neats/main.go @@ -0,0 +1,24 @@ +package main + +import "fmt" + +func main() { + numbers := []int{1,7,3,8,2,4,5,4,9,0} + + for i := range numbers { + fmt.Printf("index: %d\n", i) + } + + for _, v := range numbers { + fmt.Printf("value: %d\n", v) + } + + people := map[string]Person{} + people["shawking"] = Person{ Name: "Stephen Hawking", State: LIVING} + people["dritchie"] = Person{ Name: "Dennis Ritchie", State: DEAD} + for k,v := range people { + fmt.Printf("Key: %s; Object: %q\n", k, v) + } + +} + diff --git a/2013/03-golang-learning-lunch/5-neats/person.go b/2013/03-golang-learning-lunch/5-neats/person.go new file mode 100644 index 0000000..ec83644 --- /dev/null +++ b/2013/03-golang-learning-lunch/5-neats/person.go @@ -0,0 +1,34 @@ +package main + +import ( + "time" +) + +const ( + IN_UTERO = iota + NEW_BORN + GROWING + LIVING + DYING + DEAD +) + +type Person struct { + Name string + Dob *time.Time + State byte +} + +func (p *Person) DobString() string { + if (p.Dob == nil) { + return "" + } + return p.Dob.String() +} + +func (p *Person) ComeToLife() { + t := time.Now() + p.Dob = &t + p.State = NEW_BORN +} + diff --git a/2013/03-golang-learning-lunch/6-inheritance/main.go b/2013/03-golang-learning-lunch/6-inheritance/main.go new file mode 100644 index 0000000..391ad2e --- /dev/null +++ b/2013/03-golang-learning-lunch/6-inheritance/main.go @@ -0,0 +1,40 @@ + +package main + +import ( + "log" + "os" + "os/exec" + "time" +) + +type Job struct { + Command string + *log.Logger +} + +func NewJob(cmd string) *Job { + return &Job{ cmd, log.New(os.Stderr, "[Job] ", log.Ldate)} +} + +func (j *Job) Run() ([]byte, error) { + j.Printf("Running [%s] ...", j.Command) + out, err := exec.Command(j.Command).Output() + if (err != nil) { + j.Fatal(err) + return nil, err + } + j.Printf("Command returned [%s]", out) + return out, nil +} + +func main() { + job := NewJob("uptime") + job.Run() + + for i := 0; i < 10; i++ { + job.Run() + time.Sleep(1 * time.Second) + } +} + diff --git a/2013/03-golang-learning-lunch/7-prof/main.go b/2013/03-golang-learning-lunch/7-prof/main.go new file mode 100644 index 0000000..2a5c4bc --- /dev/null +++ b/2013/03-golang-learning-lunch/7-prof/main.go @@ -0,0 +1,18 @@ +package main + +import ( + "log" + "net/http" + _ "net/http/pprof" + "time" +) + +func main() { + go func(){ log.Println(http.ListenAndServe("localhost:6060",nil))}() + log.Println("Sleeping") + for { + log.Print(".") + time.Sleep(3 * time.Second) + } +} + diff --git a/2013/03-golang-learning-lunch/8-io-chain/main.go b/2013/03-golang-learning-lunch/8-io-chain/main.go new file mode 100644 index 0000000..403b2cd --- /dev/null +++ b/2013/03-golang-learning-lunch/8-io-chain/main.go @@ -0,0 +1,22 @@ +package main + +import ( + "compress/gzip" + "encoding/base64" + "io" + "os" + "strings" +) + +func main() { + var r io.Reader + r = strings.NewReader(data) + r = base64.NewDecoder(base64.StdEncoding, r) + r, _ = gzip.NewReader(r) + io.Copy(os.Stdout, r) +} + +const data = ` +H4sIAAAJbogA/1SOO5KDQAxE8zlFZ5tQXGCjjfYIjoURoPKgcY0E57f4VZlQXf2e+r8yOYbMZJhoZWRxz3wkCVjeReETS0VHz5fBCzpxxg/PbfrT/gacCjbjeiRNOChaVkA9RAdR8eVEw4vxa0Dcs3Fe2ZqowpeqG79L995l3VaMBUV/02OS+B6kMWikwG51c8n5GnEPr11F2/QJAAD//z9IppsHAQAA +` + diff --git a/2013/03-golang-learning-lunch/9-http-srv/main.go b/2013/03-golang-learning-lunch/9-http-srv/main.go new file mode 100644 index 0000000..cc8fbbf --- /dev/null +++ b/2013/03-golang-learning-lunch/9-http-srv/main.go @@ -0,0 +1,21 @@ +package main + +import ( + "fmt" + "log" + "net/http" +) + +// START OMIT +func routeSlash(w http.ResponseWriter, r *http.Request) { + log.Printf("Got a request from %s", r.RemoteAddr) + fmt.Fprintf(w, "It Works!\n") +} + +func main() { + log.Println("listening on 0.0.0.0:4000") + http.HandleFunc("/", routeSlash) + log.Fatal(http.ListenAndServe("0.0.0.0:4000", nil)) +} +// STOP OMIT +