Slide 1

Slide 1 text

let’s go @andrewsmedina http://andrewsmedina.com let’s go Saturday, May 11, 2013

Slide 2

Slide 2 text

globo .com @andrewsmedina ‣ dev na globo.com ‣ faz parte do time do tsuru paas ‣ contribui com projetos opensource (django, circus, splinter...) ‣ profeta nas horas vagas Saturday, May 11, 2013

Slide 3

Slide 3 text

globo .com por que go? Saturday, May 11, 2013

Slide 4

Slide 4 text

globo .com linguagens estáticas ‣ rápidas ‣ erros a nível de compilação Saturday, May 11, 2013

Slide 5

Slide 5 text

globo .com http://www.thinkgeek.com/product/dac0/ Saturday, May 11, 2013

Slide 6

Slide 6 text

globo .com linguagens estáticas ‣ verbosas ‣ build lento Saturday, May 11, 2013

Slide 7

Slide 7 text

globo .com linguagens dinâmicas ‣ sintaxe agradável Saturday, May 11, 2013

Slide 8

Slide 8 text

globo .com http://media.npr.org/assets/img/2012/08/20/slow-f7c667bbe3c1b9c54cf5061ade96c6799cef281b-s6-c10.jpg Saturday, May 11, 2013

Slide 9

Slide 9 text

globo .com linguagens dinâmicas ‣ lentas ‣ erro em runtime Saturday, May 11, 2013

Slide 10

Slide 10 text

globo .com goals ‣ concorrência ‣ eficiência ‣ fácil ‣ divertida Saturday, May 11, 2013

Slide 11

Slide 11 text

globo .com let’s go Saturday, May 11, 2013

Slide 12

Slide 12 text

globo .com hello world package main import "fmt" func main() { fmt.Println("hello devcamp!") } Saturday, May 11, 2013

Slide 13

Slide 13 text

globo .com hello world 2 - a missão package main import "fmt" func main() { nome := “andrews” fmt.Printf("meu nome é %s\n", nome) } Saturday, May 11, 2013

Slide 14

Slide 14 text

globo .com tipagem (estática) ‣ estática ‣ inferência de tipos Saturday, May 11, 2013

Slide 15

Slide 15 text

globo .com for package main import "fmt" func main() { for i := 0; i <= 10; i++ { fmt.Println(i) } } Saturday, May 11, 2013

Slide 16

Slide 16 text

globo .com primos func ehPrimo(numero int) bool { for i := 2; i < numero; i++ { if numero % i == 0 { return false } } return true } Saturday, May 11, 2013

Slide 17

Slide 17 text

globo .com primos cont.. func main() { numeros := []int{3, 5, 6, 7, 10, 11, 22, 32, 43, 111} for _, numero := range numeros { if ehPrimo(numero) { fmt.Printf("%d é primo.\n", numero) } } } Saturday, May 11, 2013

Slide 18

Slide 18 text

globo .com slices ‣ []type{item1, item2...} ‣ []int{1,2,3} Saturday, May 11, 2013

Slide 19

Slide 19 text

globo .com maps ‣ map[type]type ‣ map[string]string Saturday, May 11, 2013

Slide 20

Slide 20 text

globo .com types type Carro struct { Modelo string } Saturday, May 11, 2013

Slide 21

Slide 21 text

globo .com types c := Carro{Modelo: "Gol"} Saturday, May 11, 2013

Slide 22

Slide 22 text

globo .com methods type Carro struct { Modelo string } func (c *Carro) Acelera() { fmt.Printf("acelerando um %s...\n", c.Modelo) } Saturday, May 11, 2013

Slide 23

Slide 23 text

globo .com methods c := Carro{Modelo: "Gol"} c.Acelera() Saturday, May 11, 2013

Slide 24

Slide 24 text

globo .com interfaces type Aceleravel interface { Acelera() } Saturday, May 11, 2013

Slide 25

Slide 25 text

globo .com interfaces type Moto struct { Modelo string } func (m *Moto) Acelera() { fmt.Printf("vrummmmm\n") } Saturday, May 11, 2013

Slide 26

Slide 26 text

globo .com interfaces func aceleraQualquerCoisa(items []Aceleravel) { for _, aceleravel := range items { aceleravel.Acelera() } } Saturday, May 11, 2013

Slide 27

Slide 27 text

globo .com interfaces c := Carro{Modelo: "Gol"} m := Moto{Modelo: "Harley"} aceleraQualquerCoisa([]Aceleravel{&c, &m}) Saturday, May 11, 2013

Slide 28

Slide 28 text

globo .com concorrência Saturday, May 11, 2013

Slide 29

Slide 29 text

globo .com bebedouro func main() { pessoas := []string{"andrews", "linus", "fowler"} for _, p := range pessoas { pegaAgua(p) go bebeAgua(p) } time.Sleep(1) } Saturday, May 11, 2013

Slide 30

Slide 30 text

globo .com goroutine ‣ “go” Saturday, May 11, 2013

Slide 31

Slide 31 text

globo .com channels func soma(x, y int, c chan int) { c <- x + y } func main() { c := make(chan int) go soma(1, 1, c) go soma(2, 2, c) x, y := <-c, <-c fmt.Println(x+y) } Saturday, May 11, 2013

Slide 32

Slide 32 text

globo .com channels ‣ <- ‣ chan int Saturday, May 11, 2013

Slide 33

Slide 33 text

globo .com baterias incluídas ‣ crypto ‣ encoding ‣ html/template ‣ image ‣ log/syslog ‣ net/http, net/mail, net/smtp Saturday, May 11, 2013

Slide 34

Slide 34 text

globo .com baterias incluídas package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "devcamp 2013") }) http.ListenAndServe("127.0.0.1:3333", nil) } Saturday, May 11, 2013

Slide 35

Slide 35 text

globo .com baterias incluídas package main import ( "os" "text/template" ) func main() { t, _ := template.New("foo").Parse("Hello, {{.}}!") t.Execute(os.Stdout, "devcamp 2013") } Saturday, May 11, 2013

Slide 36

Slide 36 text

globo .com quem já está usando go ‣ google ‣ heroku ‣ mozilla ‣ globo.com ‣ canonical Saturday, May 11, 2013

Slide 37

Slide 37 text

globo .com #comofaz? ‣ http://tour.golang.org/ ‣ http://golang.org/doc/install ‣ http://golang.org/doc/code.html ‣ http://golang.org/doc/effective_go.html Saturday, May 11, 2013

Slide 38

Slide 38 text

let’s go @andrewsmedina http://andrewsmedina.com dúvidas? Saturday, May 11, 2013