Golang: Como organizar pastas e arquivos em projetos Go

18.46k views3968 WordsCopy TextShare
Full Cycle
Aprenda de uma vez por todas a como organizar seus projetos com arquivos e pastas seguindo o padrão ...
Video Transcript:
se você quer trabalhar com grandes aplicações fazendo grandes projetos na linguagem Gol sem dúvidas você vai querer seguir padrões que a comunidade utiliza padrões de organização de arquivos de projetos de pastas e tudo mais e eu lembro que quando eu comecei com a linguagem Gol eu tinha exatamente essas dúvidas Então eu tô gravando esse vídeo aqui para te ajudar nesse caminho e para deixar tudo mais claro para você hoje maravilha então vamos falar aí sobre como organizar projetos pastas e arquivos na linguagem go roda a vinheta [Música] Olá pessoal tudo bem seja muito bem-vindo e
muito bem-vinda a mais um vídeo aqui no canal foolsaico meu nome é Wesley Williams e no vídeo de hoje a gente vai fazer com que você crie os seus projetos em gol de uma forma muito mais tranquila de uma forma muito mais padronizada seguindo boas práticas vamos dizer assim que a comunidade Gol utiliza na hora da criação dos projetos mas antes da gente ir direto o assunto eu gostaria muito mesmo de pedir para você já deixar um joinha nesse vídeo se inscrever no nosso canal e ativar as notificações assim sempre como vídeo top que nem
esse foi pro Ar você vai ser notificado ou notificado maravilha então vamos lá galera vamos falar aqui sobre essa organização de pastas tá pessoal eu acho que a grande dificuldade que as pessoas têm quando tá começando com qualquer linguagem de programação é tentar se sentir parte de uma comunidade sentir parte que você não você aquele peixe fora d'água ovelha negra da família que faz tudo diferente do que a uma comunidade ela se posiciona vamos dizer assim né e eu lembro que quando eu comecei com a linguagem Gol o meu maior minha maior dúvida era como
que eu começo a trabalhar com o projetos Gol né eu trabalhava com PHP com o pai então já tinha mexido com um pouco com Java já tinha trabalhado obviamente com Java script e eu sentia sempre que eu tava trabalhando com algum Framework eu tinha boas práticas de programação e com o gol eu não tinha a mínima ideia de como começar e o pior ainda toda vez que eu olhava um projeto Gol Open sars cada projeto tinha uma organização de passa totalmente diferente então eu não sabia no que seguir eu assumo para vocês que o que
que eu comecei a fazer no começo eu entrei a no projeto do clube Bernardes Viu como é que eles organizavam as pastas e tentava seguir mais ou menos isso aqui hoje eu quero mostrar como que normalmente a comunidade está seguindo e um guia para você conseguir trabalhar e organizar Suas pastas vai ficar muito mais fácil você trabalhar dessa forma e também não vai sentir mais um peixe fora d'água quando você for criar seu projeto Beleza então vou fazer o seguinte galera deixa eu compartilhar aqui a tela do meu computador para gente falar um pouco sobre
isso aqui pessoal o seguinte tá primeiro eu vou passar dar uma geral nessas pastas que a gente vai trabalhar e depois eu vou ah recomendar para vocês um repositório do github onde tem diversos desses padrões inclusive mais detalhados mas eu acho que vale aqui algumas ressalvas na hora que eu for falar para vocês porque eu vou dar pelo menos o meu sentimento o meu ponto de vista na hora que eu tô desenvolvendo tá então primeira coisa é o seguinte galera toda vez quando você for começar um projeto Gol você vai iniciar tá esse seu projeto
com o gold tá Ou seja você vai inicializar como se você tivesse um pack de ponto Jason um composer ponto Jason e etc e etc Então você vai dar um Gol um gol a mod Nossa tá difícil hein mod Elite tá E aqui na hora que você for dar um goldenite você vai setar o nome do seu pacote utilizando um name Space tá isso aí que é um dos pontos mais importantes da mesma forma como no Java Às vezes a gente coloca assim ó com a senha br.com/fulsar o gol normalmente você vai colocar o seu
repositório do github que você vai criar tá legal porque porque daí se o seu projeto for público principalmente a pessoa só vai colocar esse endereço do github e já vai conseguir baixar o seu projeto ou vai utilizar alguma dependência externa se o seu repositório for fechado não vai ter problema quem tiver permissão também vai conseguir trabalhar e tudo mais legal então primeiro ponto que você vai trabalhar é seguindo o nome do seu name space/ o nome do seu projeto você dando um enter aqui ele vai criar o arquivo mod né E você já vai ter
aqui basicamente o seu name Space o seu arquivo de módulo para você trabalhar eu acho que você se você já trabalha com gol Ou você já trabalhou com God isso não deve ser uma novidade mas novamente eu só tô criando esse arquivo aqui do zero para te lembrar tá de boas práticas na hora que você vai criar um nome do seu modo tá agora um ponto importante que você vai perceber tá eu vou começar esse caminho Toda vez que você vai criar um projeto em gol tá esse é o Projeto vai ter toda a parte
do fonte do seu projeto as suas regras de negócios bibliotecas que você utiliza e o entrepoint que no final das contas vai ser o seu arquivo Men ou seja o arquivo que tem a função Men que vai executar Então por boa prática a gente separa esse arquivo do restante do projeto e normalmente a gente separa com o quê com uma pasta que a gente chama de CMD Então vou criar uma pasta CMD aqui e o que muita gente faz e eu fiz por muito tempo é criar o arquivo em direto nessa pasta mas o grande
ponto é que às vezes você vai precisar ter mais do que um arquivo Man imagina que você tenha um server e um clinite imagina que você tem um server um clight um cli imagina que você tem diversos entre Pontes na sua aplicação é muito comum você trabalhar dessa forma um Gol então o que que você vai fazer dentro você vai colocar o nome da sua aplicação Então vou colocar assim por exemplo api- server tá e eu vou jogar o meu man.gou aqui inclusive Quando eu der um build nessa minha aplicação o que que vai acontecer
o nome do meu executável vai ser api server por exemplo e aqui né você vai colocar o nome do seu pacote vai criar sua função Man e você tá felizão aqui e tudo mais se eu quiser criar um por exemplo sei lá um api clite não tem problema nenhum porque porque como esses arquivos eles estão em pastas diferentes eu posso ter diversos mentes que a gente não vai conflitar um ponto importante que você já deve ter percebido o gol ele não te obriga a ter o nome do pacote com o mesmo nome da pasta então
eu não vou ter problemas de conflitos por aqui legal então aqui dentro de CMD você sempre vai trabalhar aqui com esse padrão aqui nome da aplicação e o seu arquivo Men Eu recomendo sempre que o seu Man se chame Man mesmo né porque a pessoa sabe que esse vai ser o seu entre Point para você conseguir trabalhar e agora a gente começa a entrar em alguns pontos que são um pouco controversos tá mas eu me acostumei trabalhar dessa forma assumo que no começo foi um pouco chato tá mas é o seguinte você sempre vai ter
de forma geral tá uma pasta que chamada de interno O que que significa essa pasta interna galera essa pasta interna significa que tudo que é interno a sua aplicação inerente a sua aplicação e que fundamentalmente vai ser utilizado apenas pela sua aplicação né fique dentro dessa pasta interna tá então por exemplo vamos imaginar aqui dentro da pasta interna eu vou criar uma parte de regras de domínio e dentro de domínios eu vou ter aqui sei lá entidades né e o que que acontece eu vou criar aqui sei lá um arquivo entre de ponto go por
exemplo peker aqui nesse caso galera o que que acontece eu mais do que recomendo que o nome do pacote seja idêntico ao nome da pasta tá Então nesse caso você não segue esse padrão aqui você segue esse padrão outra coisa que é muito comum e que eu sigo faz tempo e me acostumei Apesar de eu ver outros colegas não seguindo muito esse padrão se eu não me engano eu tinha visto isso no guidelinete daí acabei seguindo isso tá que é o seguinte o nome das pastas e os nomes dos arquivos sempre no singular tá e
uma outra coisa importante também tá quando você for trabalhar dessa forma aqui você também sempre trabalho com letras minúsculas e também os arquivos sempre separados por underline Tá então vamos imaginar que eu vou criar meu arquivo de teste Então vou colocar em TI Underline teste.gov quando a gente está falando sobre testes aproveitando o gancho aqui galera sempre o seu Arquivo ele vai terminar com underline teste tá isso vai ficar muito mais claro aqui para vocês uma outra observação sobre testes aqui também que vai ser o seguinte se aqui dentro da pasta entity tá você na
pasta íntima dentro do seu arquivo de teste você colocar o nome em ti o que que isso vai refletir nos seus testes vai significar que você vai ter acesso tá a métodos privados privados ou seja aquelas que começam com letra minúscula Então isso é muito bom para você testar de forma de unidade né as suas funções os seus métodos de tudo mais a dentro do mesmo pacote porém às vezes a gente quer testar apenas por fora ou seja eu não quero ter acesso a esses métodos privados então o que que eu faço aqui no packji
eu separo como teste isso vai fazer o quê com que eu não tenha acesso agora aqui aos arquivos teste aos arquivos aqui em ti que sejam privados ou seja se eu tenho uma strecht aqui type sei lá product aqui para mim aqui eu não vou ter acesso a esse porque eu tô aqui com underline teste e aqui eu não tô com underline teste porém se eu colocar P aqui maiúsculo que que vai acontecer eu vou ter acesso a essa strecht porque eu estou em pacote diferente mas esse arquivo né Essa Strike aqui tá exportada para
mim tá então sempre se ligue quando você tá trabalhando com teste você tem a opção de colocar o underline teste mesmo que eu tenha diferentes pacotes dentro do meu mesmo caminho aqui isso é importantíssimo para você se lembrar Beleza agora um ponto aqui que eu quero deixar claro é que quando eu tô criando algo interno né ou seja interno só vou utilizar aqui arquivos que fazem sentido especificamente para o meu projeto porque porque às vezes você quer trabalhar com bibliotecas né Vamos imaginar que eu vou criar uma biblioteca de validação de CPF uma biblioteca de
comunicação com o kill ou seja essa minha biblioteca ela pode ser utilizada para minha aplicação ou também para Outras aplicações Então nesse caso ao invés de eu colocar os arquivos dessa minha biblioteca dentro da minha pasta interna o que que eu vou fazer eu vou criar uma pasta chamada pkg tá e dentro dessa pasta pkg eu voltei por exemplo aqui sei lá deixa eu digitar aqui sei lá Kafka tá e dentro de Kafka eu vou ter sei lá um carro fica aponta o gol e um pack de Kafka aqui para mim então o que que
isso significa significa que outros pacotes quer dizer outros projetos vão poder utilizar esse meu pacote do Kafka sem nenhum problema porque porque eu estou dentro da na pasta pkg e qualquer um pode utilizar tanto esse meu projeto aqui que tá dentro da interno quanto outros projetos a que precisam sei lá utilizar o meu pacote do Apache CAF que eu tô criando aqui dentro tá então isso aí é fundamental se você tá criando uma biblioteca para sua aplicação ou para outras utilizarem trabalha dentro da pasta pkg beleza somente de você já utilizar esse padrão tá você
já resolve 90% dos seus problemas na hora de você criar qualquer projeto em gol tá com isso aqui você já resolve diversos problemas agora existe algumas outras recomendações eu vou falar para vocês que algumas dessas recomendações eu não gosto e eu utilizo torcendo o nariz existe algumas recomendações que eu gosto e existem outras recomendações que eu não utilizo tá então eu vou começar pela recomendação que eu não utilizo mas eu não vou dizer que você não deve utilizar tenha clareza do que você for trabalhar tá uma das recomendações é na parte de build tá então
aqui tá tudo bem você vai utilizar tudo que você precisa ter para fazer o build da sua aplicação o grande ponto é que na hora de fazer o build muitas vezes você cria o que um docker file Tá e por padrão o que que é recomendado que você cria o seu docker file dentro dessa pasta de build tá então eu coloco aqui sei lá foram Gol um ponto 20 por exemplo aqui né E cria o meu docker Fire Então isso aqui me ajuda a fazer meu build eu também posso criar aqui o meu docker com
pouso e pontier o grande ponto é que é um padrão muito claro que eu vejo em qualquer tipo de projeto que tanto o seu docker Fire o quanto o docker composto eles fiquem na raiz do seu projeto então eu não utilizo em relação a parte de docker tá essa recomendação de colocar tudo dentro da pasta build tá somente para você saber se você já viu algum projeto meu você vai ver que o docker docker com pose ou se eu vou criar algum docker para produção o que que eu faço eu crio um docker file ponto
prod para eu trabalhar com um docker Fire específico para a produção e aqui esse meu docker file fica para desenvolvimento tá então é basicamente esse padrão que eu utilizo tá não digo que é errado mas ele não segue meio que uma recomendação de goland stender eu vou compartilhar com vocês e vou deixar na descrição aqui do vídeo isso aí para você também um padrão que eu utilizo é a parte de configs tá o que que acontece sempre quando você vai trabalhar com arquivos de configuração tá Ou seja você Vai disponibilizar os seus arquivos de variáveis
de ambiente os seus programas em gol que faz a leitura de variáveis de ambiente para você trabalhar e tudo mais normalmente esses arquivos Eu deixo sim dentro dessa pasta de config eu não sei se você já percebeu que aqui eu começo me sentir um pouco mal mas a me acostumei porque Lembra que eu falei que eu trabalho com padrão utilizando sempre tudo no singular aqui eu não tô no singular tá então isso me incomoda um pouco mas aqui eu vou seguindo mais ou menos da forma como eu vou trabalhando tá outra coisa interessante é que
se eu tenho documentações adicionais ao meu projeto eu vou colocar essas minhas documentações aqui essas documentações Às vezes você tem até um site de documentação você pode colocar ele aí tá não são a documentações geradas né pelo seu Gol doc são coisas adicionais tá são detalhes que você quer trazer a mais sobre o seu projeto e o porquê que eu tô dizendo isso porque olha só que interessante nós temos um outro padrão esse eu utilizo No começo eu não gostava porque eu acho que ele não deixa Claro alguns pontos que é o seguinte uma pasta
chamada api essa pasta que chamada api não é a pasta onde você vai colocar os seus arquivos de api aqui dentro né quando você ler api dá impressão que você vai colocar o seu Web Server aí dentro né mas aqui não aqui você vai colocar os seus arquivos para as documentações normalmente ou para geração de documentações de api por exemplo o seu arquivo do Swagger né quando você tá trabalhando com Swag você tem que gerar né aquele arquivo dele então você pode colocar tudo aí dentro dessa pasta para mim aqui não era muito comum fazer
isso mas acabei me acostumando então toma aí essa pasta de apis legal uma pasta que eu realmente utilizo tá eu acho bem interessante é a pasta de script Tá o que que acontece é muito comum quando você tá trabalhando com um projetos em Gol você criar make files você criar alguns scripts para geração de diversas coisas raramente você vai fazer um projeto 100% igual às vezes você quer criar algumas automações e tudo mais então esses scripts você pode trabalhar aqui dentro aqui dessa pasta uma outra coisa aqui também que você pode utilizar é um uma
pasta chamada de teste tá para que que você vai utilizar essa pasta teste sendo que no meu arquivo aqui do meu interno eu tenho meu arquivo teste se você perceber esse teste aqui é local ele é de unidade ele testa esse pacote né mas às vezes você precisa fazer um teste aí de twendy por exemplo né sei lá você vai trabalhar com Cypress você não interessa você coloca tudo que tem a ver com testes de forma mais geral aqui dentro tá então às vezes você vai criar algum arquivo ponto http você vai trabalhar com os
padrões lá do post uma etc eu jogo tudo aí dentro dessa pasta teste aqui para vocês legal o que mais que nós podemos falar galera a exemplos uma coisa que é muito comum é que às vezes você quer estar exemplos das suas documentações tá como assim né Você quer dar exemplos de como funciona uma determinada biblioteca você quer dar exemplos de como a pessoa pode criar diversas opções de utilização do seu software você quer colocar códigos de exemplo de como implementar as bibliotecas que você criou então você pode criar uma pasta exemplos e seguir aqui
para você também legal a partir de agora galera tem algumas coisas que vai depender muito de como que você trabalha tá Às vezes por exemplo você precisa de acertos né imagina que você tá criando uma aplicação e vai usar uma imagem vai utilizar um CSS Então nesse caso aqui você vai criar uma pasta chamada web e dentro dessa pasta web você vai colocar todos os seus acerts tá então eu utilizo bastante isso aqui quando eu vou trabalhar porém você vai ver que existe também um padrão que você cria aqui por exemplo um website Às vezes
você vai criar um website daquele seu projeto que você Vai disponibilizar Então você coloca os arquivos do seu Website aqui tá mas não confunda Website com web porque o Web são as acets que a sua aplicação vai utilizar Website é website da sua aplicação que você vai trabalhar né normalmente esses websites a gente vê muito por exemplo quando você sei lá você vai ver que se você vai usar uma biblioteca toda e essa biblioteca tem um site apresentação como é que funciona então normalmente você coloca aqui Website vai utilizar websites por exemplo também e tudo
mais então isso aqui é muito comum também tá um outro ponto aqui que pode parecer um pouco contraditório é que eu falei para vocês que normalmente você coloca todos os seus scripts aqui os seus makefiles Às vezes você vai utilizar com pá então às vezes você vai trabalhar com Rust O que que você faz você joga todos os scripts para te ajudar automatizar pontos do seu projeto porém é muito comum você se deparar também como é que faz na raiz do seu projeto tá esse make Fire normalmente é um meio que faz o que você
trabalha de forma mais global no seu projeto então novamente a gente fica às vezes um pouco na dúvida será que esse meu make Fire não deveria estar dentro de scripts então normalmente criam coisas específicas o meu makefile aqui eles criam coisas globais por exemplo Ah vou gerar meu arquivo para ele gerar minhas bibliotecas de RPC ou qualquer coisa desse tipo eu taco tudo aqui dentro do meu make file tá E às vezes o meu make falho ele pode chamar scripts que estão dentro da pasta script então ele é o pai de todos os seus meios
que você vai ter dentro do seu projeto tá pessoal de forma geral tá nem tudo do padrão que acabou sendo meio que estipulado tá pela comunidade eu vou passar aqui para vocês o site o gol Land standards deixou até abrir aqui ó você acessar Golem Standard você vai ver que você tem todos esses arquivos aqui tudo mais né E você pode inclusive acessar e ele vai te dar exemplos de projetos reais que utilizam esse tipo de padrão por exemplo a pasta tus né o estilo utiliza essa pasta tudo então você clica e vê como que
o qual são os arquivos que ficam dentro desse arquivo Plus e é louco né porque aqui por exemplo no início ele tem vários arquivos sh né que normalmente podem ser arquivos de script que poderiam estar na pasta scripts entende que eu tô dizendo então assim Nem tudo desse padrão eu gosto tá então assim se você quer começar a esses padrões e começar a utilizar eles de forma geral Eu recomendo o que CMD interno packed e confie e confies tá o restante em cima daí você pode se organizar da forma principal porque não vai ter tanta
tanto impacto em terceiros agora realmente o interno e o pack e o CMD são os pontos assim que resolvem 90% de qualquer pessoa que vai olhar o seu projeto aqui por dentro tá pessoal eu acho que era isso que eu queria trazer tá Wesley Por que que você fez esse vídeo longo e ao invés de dar esse link só e acabou porque eu queria passar a minha interpretação de como que eu vejo essas pastas tá inclusive como eu trato internamente com arquivos ou dentro do interno tudo minúsculo e tudo mais isso não significa que eu
tô certo e isso significa que inclusive no futuro eu posso até mudar esse padrão de Como eu utilizo mas hoje no momento que eu tô gravando esse vídeo eu utilizo esse padrão tá você tem que utilizar não mas eu recomendo que você siga o padrão do CMD interno e o pé Cage pelo menos para você começar a trabalhar Maravilha pessoal vou deixar isso no link e quero saber de você você que está começando com a linguagem Gol ou se você já tem muito tempo na linguagem Qual que é o padrão que você utiliza o que
que você faz diferente de mim então deixa aí o seu comentário vamos falar mais sobre esse assunto porque realmente faz uma diferença muito grande principalmente quem vai começar a novos projetos com gol quem tá começando a linguagem ter um norte da onde parte maravilha É isso aí galera um grande abraço para você tudo de bom e até o nosso próximo vídeo aqui no canal [Música]
Copyright © 2025. Made with ♥ in London by YTScribe.com