+ All Categories
Home > Technology > Introducao Google GO

Introducao Google GO

Date post: 27-Jun-2015
Category:
Upload: eder-magalhaes
View: 1,165 times
Download: 3 times
Share this document with a friend
Description:
Apresentação usada no minicurso Introdutório a Linguagem GO, na Globalcode
Popular Tags:
56
Mini-curso Gratuito Eder Magalhães
Transcript
Page 1: Introducao Google GO

Mini-curso Gratuito

Eder Magalhães

Page 2: Introducao Google GO

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

Page 3: Introducao Google GO

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

Page 4: Introducao Google GO

Google

Introdução

Sem falar nos serviços...

Page 5: Introducao Google GO

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

Page 6: Introducao Google GO

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

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

Introdução

Page 7: Introducao Google GO

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

Introdução

Page 8: Introducao Google GO

GO Team •  Russ Cox

•  Rob Pike

•  Ken Thompson

•  Robert Griesemer

•  Adam Langley

•  Ian Taylor

Introdução

Page 9: Introducao Google GO

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

Page 10: Introducao Google GO

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

Page 11: Introducao Google GO

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

Page 12: Introducao Google GO

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

Page 13: Introducao Google GO

Compilando

Introdução

Arquivo GO Arquivo 8 8g (compila)

Arquivo out

fonte byte-code

executável

Page 14: Introducao Google GO

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

Page 15: Introducao Google GO

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

Introdução

Page 16: Introducao Google GO

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

Page 17: Introducao Google GO

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

Page 18: Introducao Google GO

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

Page 19: Introducao Google GO

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

Page 20: Introducao Google GO

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

Introdução

a _x9 VariavelComposta numeração

Page 21: Introducao Google GO

Comentários

Introdução

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

Page 22: Introducao Google GO

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

Page 23: Introducao Google GO

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

Page 24: Introducao Google GO

Tipos Numéricos Ponto Flutuante

Introdução

Tipo Range de Valores float32 IEEE-754

float64 IEEE-754

** float para 32 ou 64 bits

Page 25: Introducao Google GO

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

Page 26: Introducao Google GO

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:

Page 27: Introducao Google GO

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

Page 28: Introducao Google GO

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

Page 29: Introducao Google GO

Condicional - if

Introdução

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

Page 30: Introducao Google GO

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"); }

Page 31: Introducao Google GO

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++ }

Page 32: Introducao Google GO

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

Page 33: Introducao Google GO

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

Page 34: Introducao Google GO

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

Page 35: Introducao Google GO

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

Page 36: Introducao Google GO

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

Page 37: Introducao Google GO

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]); }

Page 38: Introducao Google GO

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

Page 39: Introducao Google GO

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]) }

Page 40: Introducao Google GO

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

Page 41: Introducao Google GO

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“ }

Page 42: Introducao Google GO

Struct e Ponteiros

Introdução

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

Page 43: Introducao Google GO

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" };

Page 44: Introducao Google GO

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());

Page 45: Introducao Google GO

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());

Page 46: Introducao Google GO

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);

Page 47: Introducao Google GO

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

Page 48: Introducao Google GO

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 ...

Page 49: Introducao Google GO

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

Page 50: Introducao Google GO

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 ...");

Page 51: Introducao Google GO

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

Page 52: Introducao Google GO

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

Page 53: Introducao Google GO

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

Introdução

Page 54: Introducao Google GO

Sites

Introdução

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

[email protected]

Page 55: Introducao Google GO

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

Page 56: Introducao Google GO

Perguntas

Introdução

?


Recommended