Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Go
Code

Vamos Lá: Organização de Código em Go

by
Difficulty:BeginnerLength:MediumLanguages:

Portuguese (Português) translation by Erick Patrick (you can also view the original English article)

Go é uma linguagem especial entre as linguagens modernas. Tem opnião. Por exemplo, há uma verdadeira formatação. Go dirá como espaçar seu código e onde colocar as chaves. Mas vai muito além disso.

Go também dira como capitalizar suas funções e variáveis para torná-las públicas ou privadas. Ditará a estrutura de diretórios do seu código. Isso pode ser espantoso para desenvolvedores chegando ao Go vindo de linguagens masi liberais.

Hoje, exploraremos algumas das restrições da Go, discutiremos seus méritos e sugeriremos opções para situações comuns.

Projeto Euler

Ao começar a aprender Go, crei uma solução para o Problema #6 e pu-lo em uma subpasta, junto a outras soluções de outros problemas em outras linguagens. Veja o Projeto Euler.

O ponto é que o Go não quer que jogue arquivos Go ao léu por todos os lugares. Depois, percebi que, embor sirva para casos bem simples onde não importamos outros pacotes, não é apropriado.

Dependências

Todo programa não trivial é composto de múltiplos arquivos, módulos, componentes ou classes. Usaremos "arquivo" como termo genérico. Eles são agrupados em bibliotecas, pacotes ou montagens. Usaremos "pacote" genericamente. O códido que escrevemos depende de códigos de outros arquivos e pacotes.

Precisamos dizer ao nosso código como encontrá-los para usar suas funcionalidades. Cada linguagem tem seu próprio termo: import, include, require. Usaremos "impor" genericamente.

Algumas linguagens (ou ferramentas delas), também nos permitem instalar dependências de repositórios de pacotes remotos e instalá-los em um local padrão para importá-los.

Nas linguagens mais comuns, temos bastante liberdade. Em C/C++, dizemos ao compilador/vinculador onde os arquivos e bibliotecas estáticas estão (usando interruptores de linha de comando ou variáveis de ambiente como INCLUDE_DIR). No Python, podemos instalar pacotes pelo PyPi com setup.py ou com pip do PyPI e de repositórios de controle de código remotos. Então importamos baseado no caminoh de busca de sys.path.

O Caminho Go

Go, como sempre, é prescritiva. Talvez ofenda sua criatividade em dizer onde colocar as coisas, mas no fim das contas, não importa, e há flexibilidade suficiente para acomodar várias situações.

Go requer o código em um espaço de trabalho. Um diretório, com três sub diretórios: src, pkg e bin. É recomendado que mantenhamos todos nosso projetos em um único espaço de trabalho. Assim, podem depender um dos outros e compartilhar pacotes de terceiros.

Nota: Trabaho no Windows e uso o PowerShell em vários exemplos interativos. Para a sessão a seguir, quis mostrar a estrutura de diretórios do meu espaço de trabalho usando o comando tree. Windows tem sua própria versão do comando, mas é limitado (sem níveis). Dizem que há um comando tree completo para Windows, aqui.

Mas o site estava inalcansável. Acabei executando um container do Docker rodando Ubuntu, montando um espaço de trabalho do Go em /docs/Go e usei o comando tree do Linux para mostrar. Então, não fique confuso se vir um ambiente Linux mostrans diretórios do Windows e arquivos .exe.

Eis nosso espaço de trabalho em Go atual. O diretório bin contém vários comandos/ferramentas do Go e o depurador delve. O diretório pkg tem um subdiretório da plataforma (Win 64) que contem pacotes organizados por suas origens (github.com, golang.com, etc.). O diretório src tem subdiretórios similares para o repositório de origin ou site (github.com, golang.org, etc.).

Vejamos o código de um dos projetos que criei dentro de src: o go-web-crawler. É bem simples: apenas uma lista de arquivos Go, uma licença e um arquivo README.

GOROOT e GOPATH

Duas variáveis de ambiente controlam nosso destino em Go. GOROOT é onde Go está instalado:

Note que a raiz do diretório de Go parece uma espécie de espaço de trabalho, com seus diretórios src, bin e pkg.

GOPATH aponta para seu espaço de trabalho. É como Go acha seu código.

Existem várias outras variáveis de ambiente relacionadas a GO, muitas eram obrigatórias configurarmos (GOOS e GOARCH, por exemplo). Agora, ela são opcionais e não deveríamos mexer nelas a menos que precisemos (por exemplo: multi-compilação). Para ver todas as variáveis de ambiente do Go, digite: go env.

Instalações e Importações

Ao criarmos um programa ou biblioteca em Go, podemos instalá-la. Programas vão para bin e bibliotecas para pkg do espaço de trabalho. No Windows, descobrimos que %GOPATH%/bin não está no diretório %PATH%, logo o Windows não acharia o executável. Adicionei ao PATH do Windows e tudo funcionou. Eis como verificar, no PowerShel, se o PATH contem o diretório bin do espaço de trabalho:

Vejamos tudo em ação.

Se formos ao diretório go-web-crawler e digitarmos go install, o arquivo go-web-crawler.exe será criado em c:\User\the_g\Documents\Go\bin:

Agora, podemos user o vasculhador web de qualquer lugar.

Múltiplos Ambientes Go

Está tudo bem, mas a vida, às vezes, não é tão simples. Talvez queiramos ter múltiplos espaços de trabalho separados. E mais, talvez queiramos múltiplas versões do Go e múltiplos espaços de trabalho para cada uma. Podemos obter isso ao configurar GOPATH, dinamicamente, para alterar o espaço de trabalhho, e configurar GOROOT para alterar a instalação Go.

Existem vários projetos de código aberto para fornecimento, administração de pacores e ambientes virtuais. Por algum motivo, a maioria não suporta o Windows. Não sei porque plataformas tem de ser específicas para plataformas. Talvez crie um administrador de ambiente multiplataforma conta própria.

Conclusão

Go faz o máximo para elimitar a complexidade acidental. Algumas vezes, parece muito restrito e prescritivo. Mas se entrar na mentalidade dos projetista da Go, começará a entender que evitar, proibir ou mandar certas coisas realmente torna tudo mais simples.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.