Guia de Iniciação em Go

Este artigo guiará você sobre como começar a aprender a linguagem Go. Apenas do ponto de vista sintático, não é difícil de aprender, você provavelmente poderá começar em alguns dias. No entanto, seguindo a convenção, antes de começar formalmente, precisamos primeiro entender seu contexto e origem.
Contexto
A linguagem Go foi criada por três grandes especialistas, que são:
- Ken Thompson, vencedor do Prêmio Turing, fundador do sistema Unix, fundador da linguagem B, fundador da linguagem C
- Rob Pike, um dos autores do sistema operacional Plan9, um dos inventores do UTF-8, líder do design da linguagem Go
- Robert Griesemer, desenvolvedor do motor JS V8, o mais jovem dos três
Há mais uma pessoa, Renee French, esposa de Rob Pike, que projetou o logotipo da linguagem Go, que é um tamanduá azul.

Em um certo dia, durante a longa espera de compilação de um projeto C++, os três engenheiros sentiram muito tédio. Foi nesse momento que Rob Pike teve subitamente uma ideia inovadora em sua mente: ele esperava projetar uma linguagem de programação concisa, pequena, de compilação rápida e com bom desempenho, para que não precisassem mais enfrentar longas esperas a cada compilação. Após uma breve tempestade de ideias, os três realizaram uma reunião curta em 20 de setembro de 2007 e começaram a discutir e projetar o protótipo inicial desta linguagem. Foi a partir deste momento que a linguagem Go nasceu oficialmente. Posteriormente, esta pequena equipe atraiu cada vez mais desenvolvedores com os mesmos ideais, e finalmente em 10 de novembro de 2009, o Google abriu oficialmente o código da linguagem Go sob a licença BSD-3-Clause, lançou a primeira versão preliminar e formou uma equipe de desenvolvimento formal.
Dica
Vale mencionar que você pode ver em outros lugares alguém chamando-a de Golang, incluindo o nome do repositório Github deste site que também se chama Golang-Doc, mas seu nome oficial sempre foi Go. No início, como o domínio go foi registrado, o domínio do site oficial adotou golang.org, fazendo com que newcomers confundissem e pensassem que se chamava Golang.

Depois disso, a equipe Go passou por três anos de design e desenvolvimento e lançou a primeira versão oficial Go 1.0 em março de 2012 (neste momento, a cadeia de ferramentas e o tempo de execução do Go ainda eram escritos em linguagem C, até o Go 1.5 que completou a auto-inicialização). Desde então, duas versões menores são lançadas a cada ano, operando e mantendo até hoje.
Os três fundadores na verdade se aposentaram há muito tempo. Na maior parte do tempo, o líder da equipe foi Russ Cox, que participou do trabalho de desenvolvimento antes mesmo do lançamento da linguagem Go e gerenciou a equipe Go por 12 anos, até agosto de 2024, quando renunciou, sendo substituído por Austin Clements para liderar o trabalho de desenvolvimento subsequente.
Se você quiser entender mais profundamente a história da linguagem Go, visite Go History para saber mais.
Características
- Sintaxe Simples A linguagem Go fez concessões entre liberdade e flexibilidade, em troca de melhor manutenibilidade e curva de aprendizado suave.
- Implantação Amigável Os arquivos binários compilados estaticamente do Go não dependem de ambiente de execução adicional, e a velocidade de compilação também é muito rápida.
- Compilação Cruzada Go só precisa definir dois parâmetros simples durante a compilação para compilar programas que podem ser executados em outras plataformas.
- Concorrência Natural O suporte à concorrência da linguagem Go é natural, basta uma palavra-chave para iniciar uma corrotina assíncrona.
- Coleta de Lixo Go tem excelente desempenho de GC, na maioria dos casos o atraso do GC não excede 1 milissegundo.
- Biblioteca Padrão Rica Do processamento de strings à análise AST de código-fonte, a biblioteca padrão poderosa e rica é uma base sólida para a linguagem Go.
- Cadeia de Ferramentas Completa Go possui uma cadeia de ferramentas de desenvolvimento completa, cobrindo compilação, testes, gerenciamento de dependências, análise de desempenho e muito mais.
A linguagem Go abandonou herança, enfraqueceu OOP, características como classes, metaprogramação, genéricos, expressões Lambda, etc., possui bom desempenho e baixa dificuldade de aprendizado. É adequada para desenvolvimento de serviços em nuvem, desenvolvimento de servidor de aplicações e programação de rede. Possui GC integrado, não exigindo que desenvolvedores gerenciem memória manualmente, e os pontos de compilação estática e cruzada também são muito amigáveis para operações.
As desvantagens da linguagem Go também são muitas, como o tratamento de erros criticado, genéricos incompletos, a biblioteca padrão embora rica tem poucas estruturas de dados embutidas, tipo interface{} em toda parte, sem tipo de enumeração. Além disso, a equipe de desenvolvimento do Go é muito teimosa, não é boa em ouvir opiniões da comunidade, etc. (Em comparação, Rust faz muito melhor em tratamento de erros, genéricos, gerenciamento de dependências, enumerações, interfaces, etc.)
Em resumo, precisamos ver uma linguagem de forma dialética. Como uma linguagem de engenharia, Go pode aumentar muito o limite inferior da equipe, mesmo que o nível dos desenvolvedores seja ruim, há uma base, raramente ocorre uma situação em que uma pessoa arruína tudo. Ao mesmo tempo, devido à sintaxe simples e baixa dificuldade de aprendizado, permite que as pessoas comecem rapidamente um projeto. Embora Go tenha existido por pouco mais de dez anos, já há um número considerável de empresas que adotaram Go como linguagem principal, o que também pode indicar que Go está gradualmente se tornando popular.
Aliás, Go é uma linguagem completamente de código aberto, mantida pela comunidade e pelo Google. O endereço oficial está no repositório do Google, há um repositório espelho idêntico no Github. Se você tiver interesse, também pode participar do design da linguagem.
Site oficial: The Go Programming Language
Repositório de Código Aberto do Google: google/go: Google Open Source
Repositório Github: golang/go: The Go programming language
TIP
O autor já enviou PR para Go. Se você quiser saber como contribuir com código para Go, pode ler este artigo que escrevi: Como Contribuir com Código para Go.
Acredito que muitos já ouviram falar mais ou menos do Rust, que é uma linguagem de programação de alto desempenho de uso geral, cujo tempo de nascimento foi um ano antes do Go. O tempo de lançamento oficial do Go1 foi 2012, o tempo de lançamento da versão oficial do Rust foi 2015. Ambas são linguagens mais modernas. Gosto muito dessas duas linguagens, elas se desenvolvem em áreas diferentes. Se você não está satisfeito com a eficiência de execução e capacidade de expressão do Go, pode tentar o Rust, mas sua dificuldade de aprendizado está longe de ser tão simples quanto a do Go.
Instalação
Download da linguagem Go: Downloads - The Go Programming Language

Stable Version refere-se às duas versões estáveis atualmente em manutenção, Archived Version refere-se a versões históricas que não são mais mantidas. Visite Log de Alterações para saber mais sobre regras de manutenção e informações de versões históricas.
Windows
Para a plataforma Windows, há dois tipos disponíveis: installer e archive. O primeiro é o pacote de instalação, basta clicar, recomendo usar o segundo, que fará você se familiarizar mais com a estrutura de diretórios da linguagem Go, e não ficará perdido se houver problemas no futuro. Escolha baixar o arquivo zip, que contém o código-fonte da linguagem Go, cadeia de ferramentas e alguns documentos. Extraia para o caminho especificado e depois configure duas variáveis de ambiente do sistema.
- GOROOT - Caminho de instalação da linguagem Go
- GOPATH - Caminho de armazenamento de dependências da linguagem Go
Após configurar, adicione dois novos itens à variável de ambiente do sistema PATH:
%GOROOT%\bin: Este é o endereço do binário do Go%GOPATH%\bin: Este é o endereço de armazenamento dos arquivos binários de dependências de terceiros que serão baixados no futuro
Execute o comando go version no powershell. Se puder exibir a versão normalmente, significa que a instalação está correta.
PS C:\user\username> go version
go version go1.21.3 windows/amd64Para atualizar, basta baixar o novo zip e substituir o diretório de instalação original.
Linux
Usando Ubuntu como exemplo, copie o link da versão desejada e baixe para o local:
$ wget https://golang.google.cn/dl/go1.21.1.linux-amd64.tar.gzExtraia para o diretório especificado:
$ tar -C ~/go -xzf go1.21.1.linux-amd64.tar.gzConfigure as variáveis de ambiente no arquivo $HOME/.bashrc:
export GOROOT=$HOME/go
export GOPATH=$HOME/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/binApós concluir, verifique a versão instalada para confirmar a instalação correta:
$ go version
go version go1.21.1 linux/amd64Para atualizar, basta baixar o novo tar.gz e substituir o diretório de instalação original.
Gerenciamento de Instalação
O método de instalação acima já é suficiente para uso básico. Pessoalmente, recomendo usar a seguinte estrutura de diretórios para armazenar a linguagem Go e seus arquivos derivados:
go/
|
|--root/
| |
| |--go1.21.3/
| |
| |--go1.20.10/
|
|--mod/
| |
| |--bin/
| |
| |--libs/
|
|--cache/
|
|--temp/
|
|--envExplicação:
- Diretório
go/rooté usado para armazenar arquivos de código-fonte de várias versões da linguagem Go go/modcorresponde aGOPATHgo/mod/libscorresponde aGOMODCACHE, que é o endereço de armazenamento das dependências de terceiros baixadasgo/mod/bincorresponde aGOBIN, endereço de armazenamento dos arquivos binários de dependências de terceirosgo/cachecorresponde aGOCACHE, armazena arquivos de cachego/tempcorresponde aGOTMPDIR, armazena arquivos temporáriosgo/envcorresponde aGOENV, arquivo de configuração de variáveis de ambiente globais
Este método não requer substituição do diretório de instalação original durante a atualização. Basta armazená-lo no diretório go/root e modificar a variável de ambiente do sistema GOROOT para a pasta da versão especificada neste diretório. Por padrão, o arquivo env é lido do caminho GOROOT/env. Ao definir a variável do sistema GOENV, separe-o de GOROOT para evitar mudanças na configuração da variável de ambiente do Go devido a mudanças de versão. Abaixo está a configuração inicial do arquivo env:
GO111MODULE=on
GOCACHE=go/cache
GOMODCACHE=go/mod/libs
GOBIN=go/mod/bin
GOTMPDIR=go/tempEste é apenas um estilo de diretório que o autor prefere. Visite Comandos - Variáveis de Ambiente para saber mais sobre variáveis de ambiente. Você pode personalizar completamente de acordo com suas preferências pessoais.
Gerenciamento de Múltiplas Versões
Eu desenvolvi uma ferramenta de gerenciamento de múltiplas versões govm, que funciona melhor quando combinada com a estrutura de diretórios acima. Ela pode gerenciar múltiplas versões do Go localmente, alternar versões a qualquer momento, também pode pesquisar e baixar outras versões do Go e instalá-las localmente.
$ govm search 1.22 -n 10
go1.22.6 76 MB
go1.22.5 76 MB
go1.22.4 76 MB
go1.22.3 76 MB
go1.22.2 76 MB
go1.22.1 76 MB
go1.22.0 76 MB
$ govm install 1.22.4
Fetch go1.22.4 from https://dl.google.com/go/go1.22.4.windows-amd64.zip
Downloading go1.22.4.windows-amd64.zip 100% |████████████████████████████████████████| (76/76 MB, 32 MB/s) [2s]
Extract go1.22.4.windows-amd64.zip to local store
Remove archive from cache
Version go1.22.4 installed
$ govm use 1.22.4
Use go1.22.4 now
# Reentrar no shell
$ go version
go version go1.22.4 windows/amd64Se você quiser saber como escrever ferramentas de linha de comando em Go, não se importe de usar govm como referência de projeto, ele também foi escrito em Go.
Editor
Atualmente, para IDEs principais de Go, pessoalmente recomendo apenas as duas seguintes:
- GoLand: Produzido pela JetBrains, poderoso, suporte abrangente, mas requer pagamento. Pode considerar a versão comunitária do IDEA com plugins.
- VSCode: Não requer pagamento, editor universal, com plugins pode escrever em qualquer linguagem.
Se houver outros editores que se adequem melhor aos seus hábitos de uso, também podem ser usados. O editor em si não importa muito. Se estiver apenas escrevendo alguns códigos de prática curtos, pode tentar o goplay fornecido oficialmente, que pode executar código Go online.
TIP
Se você estiver usando JetBrains Toolbox, pode tentar uma ferramenta de linha de comando que escrevi AutoToolBox, que pode gerar menus de contexto do Windows para Toolbox. Imagem de visualização abaixo:

Mensagem
A dificuldade geral da linguagem Go não é alta. Se você tiver base em outras linguagens, aprender será muito simples. Durante o aprendizado, se encontrar dificuldades que não consegue entender, pode pular temporariamente. Aprender qualquer linguagem é primeiro entender geralmente a sintaxe e estrutura da linguagem, depois investigar algumas características e detalhes. A filosofia do documento também é esta, adequada para aprendizado inicial. O autor é apenas um estudante comum, inevitavelmente pode haver omissões e erros. Se encontrar algum erro, pode enviar um PR no Github. Se achar que a documentação está boa, pode dar uma Star no Github.
Se você é um desenvolvedor de linguagens fortemente OOP, como Java, C#, etc., não entre com ideias pré-concebidas com pensamento OOP, caso contrário ficará confuso com muitos designs do Go e se sentirá muito desconfortável ao escrever código. O autor também foi assim no início.
Visão Geral
Abaixo está uma introdução simples ao conteúdo deste site, para que você possa ler de acordo com a necessidade. Algumas páginas em branco significam que ainda não foram atualizadas.
- Introdução à Linguagem: Explica principalmente o conteúdo sobre a própria linguagem Go, mais teórico.
- Sintaxe Básica: Fala principalmente sobre sintaxe muito básica, como regras de sintaxe
if,for, etc. - Sintaxe Avançada: Fala sobre coisas exclusivas do Go, sobre módulos, testes, corrotinas e outros conteúdos relacionados.
- Biblioteca Padrão: Uma introdução simples à biblioteca padrão do Go. Como o conteúdo da biblioteca padrão é realmente muito grande, é atualizado aleatoriamente.
- Princípio de Implementação: Fala principalmente sobre alguns princípios de design interno da linguagem Go, como agendamento de corrotinas, gerenciamento de memória, coleta de lixo, etc.
- Sintaxe Básica: Fala principalmente sobre sintaxe muito básica, como regras de sintaxe
- Ecossistema da Comunidade: Explica principalmente o ecossistema ao redor do Go, mais aplicado.
- Banco de Dados: Opera bancos de dados principais com Go.
- Microsserviços: Apresenta algumas ferramentas de microsserviços relacionadas ao Go.
- Bibliotecas de Terceiros: Apresenta algumas bibliotecas de terceiros escritas em Go, atualizadas aleatoriamente. Também pode visualizar diretamente em Navegação de Dependências.
Vá para Preparar para Iniciar para aprendizado inicial
