Go in 7 minutes
11 June 2013
Thomas Kappler
www.thomaskappler.net
Thomas Kappler
www.thomaskappler.net

package main
import (
"fmt"
)
func main() {
fmt.Println("Hello, λ!")
}Plus some awesomeness!
Lightweight pseudo-threads passing data.
Goroutines & channels.
"Don't communicate by sharing memory, share memory by communicating."
― Rob Pike
ch := make(chan int)
go func() {
for i := 0; i < 10; i++ {
ch <- i
}
close(ch)
}()
for num := range ch {
fmt.Println(num)
}ch := make(chan int)
go func() {
for i := 0; i < 10; i++ {
time.Sleep(time.Duration(rand.Intn(3)) * time.Second)
ch <- i
}
close(ch)
}()
for {
select {
case num := <-ch:
fmt.Println(num)
case <-time.After(1 * time.Second):
fmt.Println("Timeout!")
break
}
}Make anything typesafe.
type Lang string
type Foo struct { ... }Make anything typesafe.
type Lang string
type Foo struct { ... }Put methods on anything.
func (l Lang) Awesome() bool { return l == "Go" }Make anything typesafe.
type Lang string
type Foo struct { ... }Put methods on anything.
func (l Lang) Awesome() bool { return l == "Go" }Compose without annoying delegates.
type WebTuesdayTalk struct {
Lang
presenter string
}Structural typing = "static duck typing".
func (f *File) Read(b []byte) (n int, err...)
implements
type Reader interface {
Read(p []byte) (n int, err error)
}-> Implement interfaces without creating a dependency.
The Go programming language tour