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