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

Conhecendo a linguagem de programação Go

Conhecendo a linguagem de programação Go

Uma introdução breve e direta sobre os principais pontos e características da linguagem de programação Go.

Vinicius Reis

May 19, 2021
Tweet

More Decks by Vinicius Reis

Other Decks in Programming

Transcript

  1. Golang Criado originalmente por Robert Griesemer, Rob Pike e Ken

    Thompson na Google, em 2007, se tornando um projeto de código aberto em 2009. Antes do Go essa galera já trabalhou em coisas como UNIX, UTF-8, B Lang, C++...
  2. Características chave - Tipagem estática - Paralelismo e concorrência -

    Garbage Collector - Binário estático - Curva de aprendizagem baixa - Simplicidade
  3. Palavras reservadas Há um total de 25 palavras reservadas no

    Go, que não podem ser usadas como identificadores. Java 54 PHP 70 Ruby 36 JS 64 Python 33
  4. Hello World Todo código Go estará dentro de um pacote.

    Para definir o “entry point” de um programa Go, criamos o pacote main seguido da função main. https://dev.to/linivecristine/meu-primeiro-hello-world-em-go-11dh
  5. Simplicidade Um dos focos do Go é a simplicidade, isso

    é percebido e sentido em tudo que é feito com Go. Desde as decisões de design da linguagem em si até o código que é produzido com ele. Raramente há duas formas de fazer algo em Go.
  6. Simplicidade No Bikeshedding A linguagem não quer te dar espaço

    para discutir coisas como espaçamentos ou o uso de ; Go possui nativamente ferramentas de linter e formatação que sempre estão presentes durante o desenvolvimento. O debate do código naturalmente fica em torno das regras de negócio e não de como ele poderia ser escrito.
  7. Visibilidade Tudo em go estará dentro de pacotes, a visibilidade

    desse “tudo” (funções, variáveis, constantes, tipos...) é definida com a presença da letra maiúscula no começo do identificador. A linguagem te incentiva a sempre documentar o que é público.
  8. Retornos múltiplos É possível devolver mais de um valor em

    uma função. O caso de uso mais comum é o tratamento de erros. De forma geral não há exceções do Go, não há try/catch.
  9. Interfaces Interfaces representam os métodos que uma struct precisa ter.

    Basta a struct ter os métodos que ela automaticamente será compatível com a interface. A interface nem precisa estar publicamente disponível no módulo.
  10. Defer É muito comum ter que executar alguma coisa “antes”

    que uma determinada função termine sua lógica. Defer simplifica este cenário, determinada ação marcada com defer será executada antes do retorno/fim da função. https://www.digitalocean.com/community/tutorials/understanding-defer-in-go-pt
  11. Goroutines Paralelismo e concorrência. Go fornece um conjunto de ferramentas

    dedicadas a situações de multi-threading. Incluindo comunicação entre goroutines e prevenção de race condition. A palavra reservada go faz a execução de uma função ir para “segundo plano”.
  12. Goroutines > Concorrência ou paralelismo? De forma geral não importa,

    Go vai provisionar as goroutines conforme os recursos (núcleos) da máquina. Também é possível determinar quantos núcleos o programa vai utilizar, criando um controle fino do uso de recursos.
  13. Onde Go Brilha? - Processos concorrentes ou paralelos, quando se

    precisa extrair o máximo possível do hardware. - Plataformas embarcadas e com poucos recursos. - Ferramentas ou sistemas multi-plataformas.
  14. Onde Go Brilha? - Processamento de grande volume de dados/arquivos.

    - APIs de alta demanda e baixo custo. - Agentes para interação com recursos do OS ou outros softwares. - Sidecars - Entrega com um único binário.
  15. Entrega com um único binário. Um projeto Go compilado para

    produção costuma ter tamanho médio de 12MB ~ 30MB, ainda é possível diminuir este tamanho usando técnicas de otimização pós build. Devido a isso deploys com Go costumam ser muito mais rápidos quando comparados a outras stacks.