Olá, pessoal! Vamos nessa segunda aula do treinamento, vamos conhecer alguns conceitos importantes da linguagem Go.
Antes de começarmos a escrever nossos primeiros códigos, é importante conhecer um pouco da história da linguagem que iremos utilizar. Afinal, entender por que uma tecnologia foi criada também nos ajuda a compreender as decisões tomadas em seu projeto.
A linguagem Go, também conhecida como Golang, foi criada dentro do Google por Robert Griesemer, Rob Pike e Ken Thompson. O projeto começou em 2007, em um contexto no qual os desenvolvedores buscavam uma linguagem que oferecesse produtividade, simplicidade e velocidade para o desenvolvimento de sistemas modernos.
Na época, grandes projetos de software estavam se tornando cada vez mais complexos. As equipes precisavam lidar com grandes bases de código, muitos desenvolvedores trabalhando simultaneamente e aplicações que exigiam alto desempenho e concorrência.
A proposta do Go foi justamente buscar um equilíbrio entre esses diferentes pontos: uma linguagem simples de aprender e utilizar, com compilação rápida, bom desempenho e recursos para trabalhar facilmente com programas concorrentes.
O código-fonte da linguagem foi disponibilizado publicamente em 2009, permitindo que a comunidade pudesse conhecer, utilizar e contribuir com o projeto. Em 2012, foi lançada a versão 1.0 da linguagem, estabelecendo uma base de compatibilidade que se tornou uma das características importantes do ecossistema Go.
Desde então, Go passou a ser utilizada em diversos projetos, principalmente em aplicações de infraestrutura, serviços de rede, ferramentas de desenvolvimento, APIs, sistemas distribuídos e aplicações que precisam lidar com muitas operações simultaneamente.
Uma curiosidade interessante é que os criadores da linguagem possuem uma longa história no desenvolvimento de sistemas e ferramentas utilizadas pela indústria de software. Isso ajuda a explicar a preocupação do Go com simplicidade, ferramentas de desenvolvimento, desempenho e facilidade de manutenção.
Agora que conhecemos um pouco da história, podemos entender melhor quais são as características que tornam o Go uma linguagem diferente de outras opções disponíveis no mercado.
Uma das principais ideias por trás do Go é manter a linguagem simples. Em vez de oferecer uma quantidade enorme de recursos e possibilidades diferentes para resolver o mesmo problema, Go procura fornecer ferramentas objetivas para que o desenvolvedor consiga escrever códigos fáceis de entender e manter.
Essa característica também contribui para que novos desenvolvedores consigam aprender a linguagem de maneira relativamente rápida.
Go é uma linguagem compilada. Isso significa que o código-fonte escrito pelo desenvolvedor passa por um processo de compilação antes de ser executado.
Uma das grandes vantagens desse modelo é a possibilidade de gerar executáveis que podem ser distribuídos e executados sem a necessidade de disponibilizar todo o código-fonte da aplicação.
Go possui tipagem estática. Em outras palavras, os tipos das variáveis são conhecidos durante a compilação, permitindo que diversos problemas sejam identificados antes mesmo da aplicação ser executada.
A linguagem também possui recursos que reduzem a quantidade de código necessário para declarar variáveis, como a inferência de tipos.
Uma das características mais conhecidas do Go é o suporte à concorrência. A linguagem possui as goroutines, que permitem executar funções de maneira concorrente, e os channels, utilizados para comunicação e sincronização entre partes concorrentes de um programa.
Esse modelo facilita o desenvolvimento de aplicações que precisam realizar várias tarefas simultaneamente, como servidores, APIs e sistemas que trabalham com operações de rede.
Go possui gerenciamento automático de memória por meio de um garbage collector. Dessa forma, o desenvolvedor não precisa realizar manualmente todas as operações relacionadas à liberação de memória.
Isso reduz a complexidade do código e ajuda a evitar determinados problemas comuns em linguagens nas quais o gerenciamento de memória é realizado manualmente.
Outro ponto muito interessante do Go é o conjunto de ferramentas que acompanha a própria linguagem. Entre elas, podemos destacar ferramentas para compilação, execução, gerenciamento de módulos, testes e formatação de código.
Um exemplo bastante conhecido é o gofmt, responsável por formatar automaticamente o código Go de acordo com o padrão adotado pela linguagem.
Isso é especialmente útil em equipes, pois reduz discussões sobre estilos diferentes de formatação e permite que os desenvolvedores mantenham uma aparência consistente no código.
Além das características técnicas, existem algumas curiosidades interessantes que podemos conhecer antes de colocar a linguagem em prática.
Agora chegamos a uma pergunta muito importante: depois de aprender Go, onde podemos utilizar essa linguagem?
Embora seja possível utilizar Go em diferentes tipos de aplicações, existem alguns cenários nos quais suas características se destacam bastante.
Go é uma excelente opção para desenvolver APIs e serviços Web. Sua biblioteca padrão possui recursos para trabalhar com HTTP, JSON, servidores e comunicação em rede, permitindo criar aplicações sem depender obrigatoriamente de grandes frameworks.
Podemos utilizar Go para criar desde APIs simples para estudos até serviços utilizados em ambientes de produção.
Outra utilização bastante comum é o desenvolvimento de microsserviços. Como o Go consegue gerar executáveis compactos e possui bom desempenho, ele se adapta muito bem a aplicações distribuídas.
Também podemos utilizar suas funcionalidades de concorrência para criar serviços capazes de lidar com diversas operações simultaneamente.
Go também é uma ótima escolha para desenvolver aplicações executadas diretamente pelo terminal.
Podemos criar ferramentas para automatizar tarefas, manipular arquivos, processar informações, realizar operações de rede ou auxiliar outras equipes de desenvolvimento.
O ecossistema de infraestrutura e computação em nuvem possui forte presença de aplicações desenvolvidas em Go. Ferramentas relacionadas a containers, orquestração, observabilidade e automação utilizam a linguagem em diversos projetos.
Por isso, aprender Go pode ser especialmente interessante para quem pretende trabalhar com infraestrutura, DevOps, Cloud ou sistemas distribuídos.
Projetos que precisam executar várias tarefas simultaneamente também podem se beneficiar bastante da linguagem.
Podemos imaginar, por exemplo, uma aplicação responsável por processar milhares de arquivos, realizar diversas requisições HTTP ou consumir mensagens de diferentes fontes. Nesses cenários, os recursos de concorrência do Go podem ser muito úteis.
É importante lembrar que não existe uma linguagem de programação perfeita para todos os tipos de projetos.
Go possui excelentes características para determinados cenários, mas a escolha de uma tecnologia deve levar em consideração os requisitos do projeto, a equipe, o ecossistema disponível, a infraestrutura e os objetivos da aplicação.
Durante nosso treinamento, o objetivo não será apenas aprender a sintaxe do Go. Também queremos desenvolver a capacidade de analisar problemas e entender quando determinadas ferramentas e tecnologias fazem sentido.
Uma das melhores maneiras de aprender uma linguagem de programação é colocando seus conhecimentos em prática. Por isso, ao longo do treinamento, podemos evoluir nossos projetos gradativamente.
A ideia é começar com problemas pequenos e aumentar gradativamente a complexidade. Dessa maneira, conseguimos aplicar os conceitos aprendidos sem tentar construir uma aplicação grande antes de dominar os fundamentos.