Packages ou pacotes na tradução literal, são uma forma de agrupar arquivos Go que contenham código de um mesmo escopo, como por exemplo, arquivos com structs, funções, variável e etc.. que ajudem na conexão/operações de banco de dados podem ser colocados dentro de uma pasta db ou database.
Mas e se eu não quiser usar packages? Nesse caso, você não vai conseguir programar em Go, pois todo programa ou lib Go é feito por um ou vários packages.
O nome do package, por convenção, é sempre o nome da última pasta no caminho de onde o arquivo se encontra. Por exemplo, os arquivos que estão no caminho foo/bar serão do package bar.
Caso você esteja fazendo um lib para ser usada por terceiros, por convenção o nome do package dos arquivos que estão no diretório root será o nome da sua lib. Se ficou confuso, de uma olhada na lib GoSOAP que implementei um tempo atrás.
Agora, no caso de você estar implementando um programa executável em Go, precisamos obrigatoriamente de um package main. O package main define qual é o package principal do programa. Acompanhando ele, precisamos implementar a função main, que é o ponto de entrada do programa.
O nome do package é sempre declarado na primeira linha de cada arquivo Go.
package main import "fmt" func main() { fmt.Println("Olá Gophers!!!") }
Uma regrinha de ouro aqui é que cada pasta só pode contar UM package, ou seja, dentro da pasta foo/bar todos meus arquivos devem declarar package bar
.
Caso o programa/lib contenha arquivos de testes, esses podem pertencer ao package bar_test. Em um próximo post entro nos detalhes.
Um outro pronto importante que vale mencionar, é que dentro do mesmo package, toda variável, struct, função e etc… que for declarada em um arquivo, estará disponível para ser usada por qualquer outro arquivo sem a necessidade de fazer um import.
Com todas as informações na mão, uma dúvida que normalmente fica é como organizar os packages dentro de um projeto. Na minha experiência existem 3 formas de fazer.
- Seguir o exemplo do repositório Go Standard. Lembrando que essa organização é algo que a “comunidade” acordou, e não é uma organização recomendada oficialmente pelo time de desenvolvimento do Go.
- Clean Arch do Uncle Bob.
- Organizar de forma que faça sentido para você, sua equipe e seu projeto.
Deixem suas dúvidas nos comentários.
Até a próxima!