Slide 1

Slide 1 text

Conhecendo a linguagem de programação Go

Slide 2

Slide 2 text

Vinicius Reis @vinicius73 @LuizVinicius73 Escrevo artigos sobre Vue.js e JavaScript. vinicius73.dev Plataformas @ M4U @vinicius73

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

Características chave - Tipagem estática - Paralelismo e concorrência - Garbage Collector - Binário estático - Curva de aprendizagem baixa - Simplicidade

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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.

Slide 8

Slide 8 text

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.

Slide 9

Slide 9 text

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.

Slide 10

Slide 10 text

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.

Slide 11

Slide 11 text

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.

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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.

Slide 15

Slide 15 text

Onde Go Brilha? Em todo lugar ❤

Slide 16

Slide 16 text

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.

Slide 17

Slide 17 text

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.

Slide 18

Slide 18 text

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.

Slide 19

Slide 19 text

E quem usa isso?

Slide 20

Slide 20 text

Comece a explorar bit.ly/go-vscode bit.ly/go-jetbrains bit.ly/go-vim gobyexample.com

Slide 21

Slide 21 text

Obrigado!