Introducao Google GO

Post on 27-Jun-2015

1.166 views 3 download

Tags:

description

Apresentação usada no minicurso Introdutório a Linguagem GO, na Globalcode

Transcript of Introducao Google GO

Mini-curso Gratuito

Eder Magalhães

Agenda •  Motivação •  Configurar ambiente •  Primeiro Exemplo •  Estrutura da linguagem •  Funções •  Valores Compostos •  Customizando Tipos •  Módulos •  Execução concorrente •  Utilitários e Dificuldades •  Perguntas

Apresentação da Agenda

Agenda •  Motivação •  Configurar ambiente •  Primeiro Exemplo •  Estrutura da linguagem •  Funções •  Valores Compostos •  Customizando Tipos •  Módulos •  Execução concorrente •  Utilitários e Dificuldades •  Perguntas

Apresentação da Agenda

Google

Introdução

Sem falar nos serviços...

Motivação •  Computadores poderosos extramamente rápidos, mas o

desenvolvimento lento; •  Suporte a concorrência e coleta de memória limitados;

•  Complexidade no controle de dependencia;

•  Modelo engessado, “tipagem como tirania”;

•  Multi-core não é encairado/aproveitado como deveria

Introdução

O Que é o GO? •  Nova linguagem de desenvolvimento do Google.

•  Desenvolvimento mais divertido, produtivo, concorrente e performático.

Introdução

GO é uma linguagem: •  Compilada; •  Concorrente; •  Garbage-collected •  Type-safe •  Modular •  Expressiva •  Experimental •  Divertida •  Open Source (BSD License)

Introdução

GO Team •  Russ Cox

•  Rob Pike

•  Ken Thompson

•  Robert Griesemer

•  Adam Langley

•  Ian Taylor

Introdução

Agenda •  Motivação •  Configurar ambiente •  Primeiro Exemplo •  Estrutura da linguagem •  Funções •  Valores Compostos •  Customizando Tipos •  Módulos •  Execução concorrente •  Utilitários e Dificuldades •  Perguntas

Apresentação da Agenda

Compiladores •  Sistemas Operacionais suportados:

o  Linux o  Mac OS

•  Tipos de instruções o  Amd64 (64 bits x86) o  386 (32 bits x32) o  ARM

Introdução

Instalando ambiente no Ubuntu (Linux) - Parte I

Introdução

# Instalação do repositório de fontes do GO $ sudo apt-get install mercurial # Instalação do compilador (gcc) $ sudo apt-get install bison gcc libc6-dev ed make # Estrutura de diretórios para GO $ mkdir $HOME/go $ mkdir $HOME/go/bin $ mkdir $HOME/go/src

Instalando ambiente no Ubuntu (Linux)

Introdução

# Configurar vars de ambiente no arquivo ˜/.bashrc export GOROOT=$HOME/go/src export GOBIN=$HOME/go/bin export GOOS=linux export GOARCH=386 export PATH=$PATH:$HOME/go/bin # Download dos fontes do GO $ hg clone -r release https://go.googlecode.com/hg/ $GOROOT $ cd $GOROOT/src # Montar a estrutura do GO $ ./all.bash

Compilando

Introdução

Arquivo GO Arquivo 8 8g (compila)

Arquivo out

fonte byte-code

executável

Agenda •  Motivação •  Configurar ambiente •  Primeiro Exemplo •  Estrutura da linguagem •  Funções •  Valores Compostos •  Customizando Tipos •  Módulos •  Execução concorrente •  Utilitários e Dificuldades •  Perguntas

Apresentação da Agenda

Código, HelloGO ! •  Rodando primeiro programa em GO...

Introdução

Características do código •  Formato do código é UTF-8;

•  Suporte a Unicode;

•  O arquivo fonte deve declarar o pacote;

•  Função main é o ponto de partida para execução.

•  fmt é o módulo com funcões c/ formatação para I/O.

Introdução

Caracteristicas do código •  O arquivo fonte deve declarar seu pacote;

•  Formato do codigo é UTF-8;

•  Suporte a unicode;

•  Função main é o ponto de partida para execução.

Introdução

Agenda •  Motivação •  Configurar ambiente •  Primeiro Exemplo •  Estrutura da linguagem •  Funções •  Valores Compostos •  Customizando Tipos •  Módulos •  Execução concorrente •  Utilitários e Dificuldades •  Perguntas

Apresentação da Agenda

Palavras reservadas

Introdução

break default func interface select

case defer go map struct

chan else goto package switch

const fallthrough if range type

continue for import return var

Identificadores •  Inicia com letra ou _ seguido por letras ou digitos:

Introdução

a _x9 VariavelComposta numeração

Comentários

Introdução

//comentario simples... /* delimitando inicio e fim */

Tipos •  Boleanos: bool   true ou false

•  Strings: string o  Array de bytes o  Imutável

  “Normal”   `inicio e   o fim`

  “String ” “em ” “varios ” “pedacos”

  “Valor ”/*isso nao */“string”/*eh considerado*/“.”

Introdução

Tipos Numéricos Inteiros

Introdução

Tipo Range de Valores uint8 / byte 0 a 255

uint16 0 a 65535 uint32 0 a 4294967295 uint64 0 a 18446744073709551615 int8 -128 a 127 int16 -32768 a 32767 int32 -2147483648 a 2147483647 int64 -9223372036854775808 a 9223372036854775807

** uint e int para 32 ou 64 bits

Tipos Numéricos Ponto Flutuante

Introdução

Tipo Range de Valores float32 IEEE-754

float64 IEEE-754

** float para 32 ou 64 bits

Declaração de Variáveis

Introdução

var s string = “”; var x, y int32 = 10, 20; var ( d float32 = 2.6; f float32 = 5.7; ) var i = 25; //sem tipagem n := 15; //sem var e tipagem var z int; //inicia com valor 0

Conversores

Introdução

var x int = 100; var i int32 = x; //ñ compila var i int32 = int32(x); //ok

•  Com string: string([]byte{'h', 'e', 'l', 'l', 'o'})

•  Com números:

Declaração de Constantes

Introdução

const Pi float64 = 3.14159265358979323846 const zero = 0.0; //sem tipagem const ( size int64 = 1024; eof = -1; //sem tipagem ) const a, b, c = 3, 4, "foo” //sem tipagem

Ponteiros: operadores & e *

Introdução

var x int = 50; //cópia var i int = x; &x == &i; i++; //i é 51

//referência var i *int = &x; &x == &i; (*i)++; //x é 51

Valor * Memória & 50 X0701 50 X0809

Condicional - if

Introdução

if [resultado boolean] { ... } [else - opcional] { ... } var b bool = true; if b { return true }

Condicional - switch

Introdução

switch t := x.(type) { case nil: fmt.Print(”t nao eh nada"); case int: fmt.Print(“t eh int”); case float: fmt.Print(“t eh float”); case bool, string: fmt.Print(“t eh boolean ou string”); default: fmt.Print(“t eh um de um tipo desconhecido"); }

Laços

Introdução

for i := 0; i < 100; i++ { if i == 50 { continue; } fmt.Printf("%d\n",i); }

x := 10;

for x < 10 { //substituto do while x++ }

Agenda •  Motivação •  Configurar ambiente •  Primeiro Exemplo •  Estrutura da linguagem •  Funções •  Valores Compostos •  Customizando Tipos •  Módulos •  Execução concorrente •  Utilitários e Dificuldades •  Perguntas

Apresentação da Agenda

Funções

Introdução

func soma(i int, x int) int { return i + x } func divide(d int, v int) (int bool) { if v > 0 { return d/v, true } return 0, false; } fmt.Print(soma(10, 5)); //15 fmt.Print(divide(15,2)); //7

Funções - Closures

Introdução

func sum() (func (int) int) { var x int; return func (n int) int { x += n; return n; } } var s = sum(); fmt.Print(s(10)); //retorna e imprime 10 fmt.Print(s(20)); //retorna e imprime 30 fmt.Print(s(10)); //retorna e imprime 130

Agenda •  Motivação •  Configurar ambiente •  Primeiro Exemplo •  Estrutura da linguagem •  Funções •  Valores Compostos •  Customizando Tipos •  Módulos •  Execução concorrente •  Utilitários e Dificuldades •  Perguntas

Apresentação da Agenda

Arrays •  Indexado a partir de 0; •  O tamanho é constante, e não pode ser negativo; •  A função len retorna o tamanho;

Introdução

var numeros [5]int; //inicializa com 0 var notas = [3]int {7,8,6}; var x = [10]int {5,2,4}; //outros elementos são 0 var d = [...]int {4}; fmt.Print(len(d)); //4

Slices •  Um pedaço de array; •  Indexado, mas o tamanho pode ser alterado; •  Mais barato do que o array;

Introdução

var fatia = notas[0:2]; var n = []int {5, 7, 9}; var x = &notas; for i:=0; i < len(x); i++ { fmt.Print(x[i]); }

Map •  Outra alternativa para estrutura de dados;

Introdução

var m map[string] int //Java: Map<String, Integer> m = map[string] int { “a”: 500, “1”:60 } var x = m[“a”]; var e = m[“2”]; //erro em execução m[“x”] = 77; //cria um novo elemento x, ok := m[“a”]; //sem erro, ok é false

Navegando em um Map

Introdução

//recupera a chave e valor for key, value := range m { fmt.Printf("key %s, value %g\n", key, value) } //recupera a chave for key := range m { fmt.Printf("key %s, value %g\n", key, m[value]) }

Agenda •  Motivação •  Configurar ambiente •  Primeiro Exemplo •  Estrutura da linguagem •  Funções •  Valores Compostos •  Customizando Tipos •  Módulos •  Execução concorrente •  Utilitários e Dificuldades •  Perguntas

Apresentação da Agenda

Struct •  Customização de tipos; •  Uma analogia a classe no Java;

Introdução

type Pessoa struct { nome, cpf string; } var p Pessoa; p.nome = "Paula"; p.cpf = "9874458147"; outro := Pessoa {“Ana“, “213123131“ }

Struct e Ponteiros

Introdução

p Pessoa := Pessoa{"Carlos", "154548484"}; ref := new (Pessoa); //ponteiro ref = &p; fmt.Print((*ref).nome)

Struct, anonymous field - Relacionamento

Introdução

type Endereco struct { logradouro, cep string; } type Pessoa struct { nome, cpf string; Endereco; } p := Pessoa{ Endereco{ "Av. Bernardino","09789-111“ }, "Ana", "1959478766" };

Métodos •  Declarado fora do struct; •  Pode ser criado para qualquer type;

Introdução

func (p *Pessoa) formata() string { return nome; } p := &Pessoa{ "Gustavo", "9809890078" } fmt.Print(p.formata());

Métodos Customizando método em um array de int:

Introdução

type arrayInt [ ]int; //type func (v arrayInt) Sum() (s int) { for i, x := range v { s += x } //return vazio return } fmt.Print(arrayInt{10, 5, 7}.Sum());

Interface •  Tipo totalmente abstrato, conceito próximo ao do Java

Introdução

type Formatador interface { formata() string }; var f Formatador; f := &Pessoa{"Carlos", "154548484"}; fmt.Print(f.formata()); type MeuInt int32; func (i MeuInt) formata () string { return string(i) } f = MeuInt(100);

Agenda •  Motivação •  Configurar ambiente •  Primeiro Exemplo •  Estrutura da linguagem •  Funções •  Valores Compostos •  Customizando Tipos •  Módulos •  Execução concorrente •  Utilitários e Dificuldades •  Perguntas

Apresentação da Agenda

Módulos Todo código GO é organizado em pacotes:

Introdução

fmt à implementa funções para formtação de I/O;

os à provê uma abstração para o sistema operacional;

math à algumas constantes e funcionalidades matemáticas;

http à implementa parse de requisição e respostas http; io à prove interface básica para manipulação I/O; reflect à funcionalidades para reflexão; time à funcionalidades para manipular e exibir informações de tempo; outros ...

Agenda •  Motivação •  Configurar ambiente •  Primeiro Exemplo •  Estrutura da linguagem •  Funções •  Valores Compostos •  Customizando Tipos •  Módulos •  Execução concorrente •  Utilitários e Dificuldades •  Perguntas

Apresentação da Agenda

Goroutines •  É a terminologia do GO para um processo concorrente, a Thread do Java; •  Aciona uma função/método de forma assíncrona;

Introdução

func preparar(conteudo string, segundos int32) { time.Sleep(minutos*1e9); fmt.Println(conteudo," pronto!"); } go preparar("feijoada", 10); go preparar("cafe", 5); fmt.Println("aguardando ...");

Agenda •  Motivação •  Configurar ambiente •  Primeiro Exemplo •  Estrutura da linguagem •  Funções •  Valores Compostos •  Customizando Tipos •  Módulos •  Execução concorrente •  Utilitários e Dificuldades •  Perguntas

Apresentação da Agenda

O que mais? •  Documentação

•  Godoc - gerador de documentação html, assim como o javadoc; •  Gofmt - formata o comentário para impressão;

•  Testes

•  Crie arquivos para testes unitários com sufixo *_test.go; •  Defina as funções de teste com o prefixo TestXxx(t *testing.T) •  Execute o gotest

Introdução

Dificuldades •  Ambiente de desenvolvimento: IDE e Debug; •  Bibliotecas e ferramentas ainda recentes; •  Integração com Banco de Dados; •  Comunidade pequena;

Introdução

Sites

Introdução

http://golang.org http://twitter.com/edermag http://twitter.com/globalcode

eder@yaw.com.br

Agenda •  Motivação •  Configurar ambiente •  Primeiro Exemplo •  Estrutura da linguagem •  Funções •  Valores Compostos •  Customizando Tipos •  Módulos •  Execução concorrente •  Utilitários e Dificuldades •  Perguntas

Apresentação da Agenda

Perguntas

Introdução

?