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