Upgrade to Pro — share decks privately, control downloads, hide ads and more …

A Linguagem de Programação Go

A Linguagem de Programação Go

Brief overview about Google Go programming language. (in Brazilian Portuguese)

Adriano J. Holanda

September 21, 2017
Tweet

More Decks by Adriano J. Holanda

Other Decks in Programming

Transcript

  1. Para quê mais uma linguagem de programação? Motivação: Problemas de

    desenvolvimento de sistemas em servidores no Google. Ambiente: sistemas enormes desenvolvidos em C++ e Java que executam em clusters ou servidores que precisavam ▶ ter o tempo de compilação reduzido; ▶ bom conjunto de ferramentas de montagem; ▶ de facilidade na programação de rede; ▶ de legibilidade, pois vários programadores trabalham no mesmo código; ▶ de suporte simples e mais adequado à concorrência. Solução: Criação da linguagem Go.
  2. O que é Go? Go é uma linguagem de propósito

    geral que possui: ▶ compilação com vinculação estática; ▶ tipo de dado estático; ▶ suporte à concorrência; ▶ foco na simplicidade. gopher
  3. História ▶ Projeto começou em 2007; ▶ Em março de

    2010, foi lançada a versão 1.0, que possui poucas alterações na especificação da linguagem para as versões posteriores; ▶ Atualmente1 o compilador Go é escrito em Go e compila para Assembly. Projetistas ▶ Robert Griesemer; ▶ Rob Pike; ▶ Ken Thompson. Projeto por consenso 1set/2017
  4. Genealogia Influência de outras linguagens ALGOL (Backus et al., 1960)

    Pascal Wirth,1970 Modula-2 Wirth,1980 Oberon Wirth & Gutknecht,1986 Oberon-2 Wirth & Mossembock,1991 Object Oberon Mossembock Templ & Griesemer, 1990 C Ritchie, 1972 CSP Hoare, 1978 Squeak Cardelli & Pike, 1985 Newsqueak Pike, 1989 Alef Winterbottom, 1992 Go Griesemer, Pike & Thompson,1991 Fonte: Donovan & Kernighan, 2015.
  5. Objetivos de Go Ser uma linguagem procedimental concisa projetada para

    desenvolver sistemas escaláveis para servidores (nuvem), que são contruídos pela composição de elementos distintos, dentre eles: ▶ tipos de dados concretos; ▶ ponteiro; ▶ concorrência; ▶ funções e métodos; ▶ interfaces; ▶ pacotes. Adicionalmente, suporte à montagem e rápida compilação executadas de forma simples.
  6. Tipos de dados concretos Ao contrário de C, os tipos

    de dados em Go são checados. Dentre eles: Tipos básicos ▶ bool ▶ string ▶ int int8 int16 int32 int64 ▶ uint uint8 uint16 uint32 uint64 uintptr ▶ byte //apelido para uint8 ▶ rune //apelido para int32, representa um caracter Unicode ▶ float32 float64 ▶ complex64 complex128 Tipo composto ▶ struct
  7. Go simples por fora, complexo por dentro A simplicidade da

    linguagem Go esconde uma série de mecanismos complexos bem projetados, dentre eles: ▶ Coletor de lixo: o ambiente de execução de Go realiza o gerenciamento de memória: ▶ Concorrência: Go permite escrever, de forma simples, partes independentes de execução dentro de um mesmo programa, e para isto conta com os comandos: ▶ goroutine (execução) ▶ channel (comunicação) ▶ select (coordenação)
  8. Concorrência: goroutine Sintaxe goroutine 1 go funcao ( args )

    Características: ▶ baixo uso de memória; ▶ sem necessidade de gerenciamento; ▶ sem necessidade de identificação das rotinas; ▶ sem retorno ou estado de conclusão.
  9. Canais “Não comunique pelo compartilhamento de memória, compartilhe memória pela

    comunicação.” 1 package main 2 3 import ”fmt” 4 5 func consome( ch chan int ) { 6 for i := 0; i < 4; i++ { 7 ch < − i 8 } 9 } 10 11 func main () { 12 c := make(chan int ) 13 go consome( c ) // depois de consumir 0 , estou cheio 14 fmt . Println(<−c ) // imprime 0 somente 15 } 16 17 [ saida ] 18 0 Fonte: https://goo.gl/hnAHc4
  10. Go pode ser orientada a objeto, com o uso de

    interfaces para preservar o contrato na implementação. ▶ Preferência à composição ao invés de herança; ▶ Uso intensivo de métodos, mas sem classes ou subclasses; ▶ Go em sua maior parte é implícito e os tipos de dados podem ser inferidos ao invés de declarados. 1 // Adaptado de Donovan & Kernighan , 2015 2 package geometria 3 4 import ”math” 5 6 type Point struct {X, Y float64 } 7 8 func Distancia (p , q Point ) { 9 return math . Hypot(q .X − p .X, q .Y − p .Y) 10 } 1 // . . . 2 3 p := Point {1 , 2} 4 q := Point {4 , 6} 5 6 d := Distancia (q , p) // funcao 7 8 fmt . Println (d) // ’5 ’ 9 10 // . . .
  11. Go pode ser orientada a objeto, com o uso de

    interfaces para preservar o contrato na implementação. ▶ Preferência à composição ao invés de herança; ▶ Uso intensivo de métodos, mas sem classes ou subclasses; ▶ Go em sua maior parte é implícito e os tipos de dados podem ser inferidos ao invés de declarados. 1 // Adaptado de Donovan & Kernighan , 2015 2 package geometria 3 4 import ”math” 5 6 type Point struct {X, Y float64 } 7 8 func Distancia (p , q Point ) { 9 return math . Hypot(q .X − p .X, q .Y − q .Y) 10 } 11 func (p Point ) Distancia (q Point ) { 12 return math . Hypot(q .X − p .X, q .Y − p .Y) 13 } 1 // . . . 2 3 p := Point {1 , 2} 4 q := Point {4 , 6} 5 6 d0 := Distancia (q , p) // funcao 7 d1 := p . Distancia (q , p) // metodo 8 9 fmt . Println (d0) // ’5 ’ 10 fmt . Println (d1) // ’5 ’ 11 12 // . . .
  12. Ferramentas (tooling) go get faz download das dependências usando os

    principais sistemas de controle de versão como o git; go test possui uma infraestrutura para realização de testes; go bench permite a execução de benchmarks; godoc possui um sistema para geração de documentação e um repositório (godoc.org).
  13. Considerações finais Go é ou pelo menos parece ser ▶

    simples de usar, mas exige planejamento e projeto; ▶ legível, desde que se saiba o que escrever; ▶ suporte à concorrência por projeto; ▶ flexível sem ser carregada de características.
  14. Referências ▶ Alan A. A. Donovan; Brian W. Kernighan. “The

    Go Programming Language”. Addison Wesley, 2015. ▶ Adriano J. Holanda. “Um Breve Passeio pela Linguagem de Programação Go”. Disponível em https://goo.gl/TZShmx. ▶ Rob Pike. “Simplicity is Complicated”. Disponível em https://youtu.be/rFejpH_tAHM. Acesso em 15/9/2017. ▶ Rob Pike; Russ Cox. “Google I/O 2010 - Go Programming”. Disponível em https://youtu.be/jgVhBThJdXc. Acesso em 15/9/2017. ▶ Andrew Gerrand. “Get Started with Go”. Disponível em https://youtu.be/2KmHtgtEZ1s. Acesso em 15/9/2017.