Introducao Google GO

1.453 visualizações

Publicada em

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

Publicada em: Tecnologia
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.453
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
31
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Introducao Google GO

  1. 1. Mini-curso Gratuito Eder Magalhães
  2. 2. 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
  3. 3. 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
  4. 4. Introdução Google Sem falar nos serviços...
  5. 5. Introdução 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
  6. 6. Introdução O Que é o GO? •  Nova linguagem de desenvolvimento do Google. •  Desenvolvimento mais divertido, produtivo, concorrente e performático.
  7. 7. Introdução GO é uma linguagem: •  Compilada; •  Concorrente; •  Garbage-collected •  Type-safe •  Modular •  Expressiva •  Experimental •  Divertida •  Open Source (BSD License)
  8. 8. Introdução GO Team •  Russ Cox •  Rob Pike •  Ken Thompson •  Robert Griesemer •  Adam Langley •  Ian Taylor
  9. 9. 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
  10. 10. Introdução 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
  11. 11. Introdução Instalando ambiente no Ubuntu (Linux) - Parte I # 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
  12. 12. Introdução Instalando ambiente no Ubuntu (Linux) # 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
  13. 13. Introdução Compilando fonte byte-code 8g (compila) Arquivo GO Arquivo 8 Arquivo out executável
  14. 14. 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
  15. 15. Introdução Código, HelloGO ! •  Rodando primeiro programa em GO...
  16. 16. 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.
  17. 17. IntroduçãoCaracteristicas 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.
  18. 18. 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
  19. 19. IntroduçãoPalavras reservadas 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
  20. 20. Introdução Identificadores •  Inicia com letra ou _ seguido por letras ou digitos: a _x9 VariavelComposta numeração
  21. 21. Introdução Comentários //comentario simples... /* delimitando inicio e fim */
  22. 22. Introdução 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*/ .
  23. 23. Introdução Tipos Numéricos Inteiros 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
  24. 24. IntroduçãoTipos Numéricos Ponto Flutuante Tipo Range de Valores float32 IEEE-754 float64 IEEE-754 ** float para 32 ou 64 bits
  25. 25. Introdução Declaração de Variáveis 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
  26. 26. Introdução Conversores •  Com números: var x int = 100; var i int32 = x; //ñ compila var i int32 = int32(x); //ok •  Com string: string([]byte{h, e, l, l, o})
  27. 27. Introdução Declaração de Constantes 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
  28. 28. Introdução Ponteiros: operadores & e * var x int = 50; Valor * Memória & //cópia 50 X0701 var i int = x; 50 X0809 &x == &i; i++; //i é 51 //referência var i *int = &x; &x == &i; (*i)++; //x é 51
  29. 29. Introdução Condicional - if if [resultado boolean] { ... } [else - opcional] { ... } var b bool = true; if b { return true }
  30. 30. Introdução Condicional - switch 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"); }
  31. 31. Introdução Laços for i := 0; i < 100; i++ { if i == 50 { continue; } fmt.Printf("%dn",i); } x := 10; for x < 10 { //substituto do while x++ }
  32. 32. 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
  33. 33. Introdução Funções 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
  34. 34. IntroduçãoFunções - Closures 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
  35. 35. 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
  36. 36. Introdução Arrays •  Indexado a partir de 0; •  O tamanho é constante, e não pode ser negativo; •  A função len retorna o tamanho; 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
  37. 37. Introdução Slices •  Um pedaço de array; •  Indexado, mas o tamanho pode ser alterado; •  Mais barato do que o array; 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]); }
  38. 38. Introdução Map •  Outra alternativa para estrutura de dados; 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
  39. 39. Introdução Navegando em um Map //recupera a chave e valor for key, value := range m { fmt.Printf("key %s, value %gn", key, value) } //recupera a chave for key := range m { fmt.Printf("key %s, value %gn", key, m[value]) }
  40. 40. 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
  41. 41. Introdução Struct •  Customização de tipos; •  Uma analogia a classe no Java; type Pessoa struct { nome, cpf string; } var p Pessoa; p.nome = "Paula"; p.cpf = "9874458147"; outro := Pessoa { Ana , 213123131 }
  42. 42. IntroduçãoStruct e Ponteiros p Pessoa := Pessoa{"Carlos", "154548484"}; ref := new (Pessoa); //ponteiro ref = &p; fmt.Print((*ref).nome)
  43. 43. Introdução Struct, anonymous field - Relacionamento type Endereco struct { logradouro, cep string; } type Pessoa struct { nome, cpf string; Endereco; } p := Pessoa{ Endereco{ "Av. Bernardino","09789-111 }, "Ana", "1959478766" };
  44. 44. Introdução Métodos •  Declarado fora do struct; •  Pode ser criado para qualquer type; func (p *Pessoa) formata() string { return nome; } p := &Pessoa{ "Gustavo", "9809890078" } fmt.Print(p.formata());
  45. 45. Introdução Métodos Customizando método em um array de int: 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());
  46. 46. Introdução Interface •  Tipo totalmente abstrato, conceito próximo ao do Java 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);
  47. 47. 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
  48. 48. Introdução Módulos Todo código GO é organizado em pacotes: 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 ...
  49. 49. 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
  50. 50. Introdução Goroutines •  É a terminologia do GO para um processo concorrente, a Thread do Java; •  Aciona uma função/método de forma assíncrona; 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 ...");
  51. 51. 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
  52. 52. Introdução 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
  53. 53. Introdução Dificuldades •  Ambiente de desenvolvimento: IDE e Debug; •  Bibliotecas e ferramentas ainda recentes; •  Integração com Banco de Dados; •  Comunidade pequena;
  54. 54. Introdução Sites http://golang.org http://twitter.com/edermag http://twitter.com/globalcode eder@yaw.com.br
  55. 55. 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
  56. 56. Introdução Perguntas ?

×