A Linguagem de Programação Go

Post on 15-Jan-2015

1.658 views 7 download

Tags:

description

Lighting talk apresentada no Dev in Cachu 2012.

Transcript of A Linguagem de Programação Go

Francisco Souza@franciscosouza

Sunday, May 6, 12

Por que Go?

Sunday, May 6, 12

Linguagens estáticas são rápidas, mas...

Sunday, May 6, 12

Linguagens estáticas são rápidas, mas...

public static <I, O> ListenableFuture <O> chain(ListenableFuture<I> input, Function<? super I, ? extends ListenableFuture<? extends O>> function)

Sunday, May 6, 12

Python e Ruby são dinâmicos! :D

Sunday, May 6, 12

Linguagens dinâmicas são divertidas, mas...

Sunday, May 6, 12

Linguagens dinâmicas são divertidas, mas...

• Pecam no desempenho :(

Sunday, May 6, 12

“Speed, reliability, or simplicity: pick two.” (sometimes just one)

Sunday, May 6, 12

“Speed, reliability, or simplicity: pick two.” (sometimes just one)

Can’t we do better?

Sunday, May 6, 12

Compilada

% 6g duck.go% 6l duck.6

Sunday, May 6, 12

Tipagem estática...

var numero int

Sunday, May 6, 12

mas com inferência de tipo...

var numero = 0numero := 0

Sunday, May 6, 12

mas com inferência de tipo...

var numero = 0numero := 0

Sunday, May 6, 12

Tipagem simplesJava

C++

Go

Sunday, May 6, 12

Tipagem simples

Integer i = new Integer(10);Java

C++

Go

Sunday, May 6, 12

Tipagem simples

Integer i = new Integer(10);Java

int i = 10;

C++

Go

Sunday, May 6, 12

Tipagem simples

Integer i = new Integer(10);Java

int i = 10;

C++

Go

i := 10

Sunday, May 6, 12

Definição de tipos

type MyInt int

Sunday, May 6, 12

Métodos

type Conta struct { saldo float64 limite float64}

func (c *C) Sacar(valor float64) { if c.valor <= c.limite { c.saldo -= valor }}

Sunday, May 6, 12

Interfaces“Duck typing”

type Duck interface {! Quak()! Walk()}

Sunday, May 6, 12

Usando a interface

func DuckDance(duck Duck) {! duck.Quak()! duck.Walk()! duck.Quak()! duck.Walk()! duck.Quak()! duck.Walk()}

Sunday, May 6, 12

type Chicken struct { }

func (a *Chicken) Quak() {! fmt.Println("Quak")}

func (a *Chicken) Walk() {! fmt.Println("Walking")}

Sunday, May 6, 12

Funções anônimas

func () { fmt.Println("Oi pessoal!")}

Sunday, May 6, 12

Concorrência

func DoSomething() { // doing something}go DoSomething()

Sunday, May 6, 12

Comunicação/sincronização

“Don’t communicate by sharing memory, share memory by communicating”

Sunday, May 6, 12

Channels

var ch chan intvar age intch = make(chan int)go func() { ch <- 1}()age = <-ch

Sunday, May 6, 12

Channels

var ch chan intvar age intch = make(chan int)go func() { ch <- 1}()age = <-ch

Sunday, May 6, 12

Channels

var ch chan intvar age intch = make(chan int)go func() { ch <- 1}()age = <-ch

Sunday, May 6, 12

Sunday, May 6, 12