Linguagem Natural no Twitter e Linguagem Documentária em ...
A Linguagem de Programação Go
-
Upload
francisco-souza -
Category
Technology
-
view
1.657 -
download
7
description
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