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