Nunu — Uma ferramenta CLI para construir aplicativos Go

Nunu — Uma ferramenta CLI para construir aplicativos Go

  • 27 Jan 2024
  • 6 min leitura

Uma dúvida muito comum para quem está iniciando com Go é em relação a organização da estrutura do projeto. Onde colocar os Controllers, Services e Repositories? Como realizar a injeção de dependência? Como acompanhar os logs?

E para facilitar esta tarefa existe o Nunu (go-nunu/nunu), um CLI para gerar o scaffolding do seu projeto. Com ele você cria em segundos uma aplicação Go completa com uma estrutura bem organizada e com as principais bibliotecas utilizadas pela comunidade, como:

Características principais

  • Baixa curva de aprendizado e personalização: Encapsula bibliotecas populares com as quais os Gophers estão familiarizados, permitindo que você personalize facilmente o aplicativo para atender a requisitos específicos.
  • Alto desempenho e escalabilidade: Tem como objetivo ser de alto desempenho e dimensionável. Ele usa as tecnologias mais recentes e as práticas recomendadas para garantir que seu aplicativo possa lidar com alto tráfego e grandes quantidades de dados.
  • Segurança e confiabilidade: Usa bibliotecas de terceiros estáveis e confiáveis para garantir a segurança e a confiabilidade do seu aplicativo.
  • Modular e extensível: Projetado para ser modular e extensível. Você pode adicionar facilmente novos recursos e funcionalidades usando bibliotecas de terceiros ou criando seus próprios módulos.
  • Documentação e testes completos: Conta com documentação e testes abrangentes. Ele fornece ampla documentação e exemplos para ajudá-lo a começar rapidamente. Também inclui um conjunto de testes para garantir que seu aplicativo funcione conforme o esperado.

Requisitos

Para utilizar o Nunu você precisa ter os seguintes softwares instalados em seu computador:

  • Go 1.19 ou superior
  • Git
  • Docker (opcional)
  • MySQL 5.7 ou superior (opcional)
  • Redis (opcional)

Primeiros Passos

Vamos instalar o Nunu através do seguinte comando:

go install github.com/go-nunu/nunu@latest

Caso a instalação tenha ocorrido com sucesso, ao executar o comando abaixo será mostrado as informações de como usar o Nunu.

nunu -h

Criando um projeto

Para criar um projeto basta executar:

nunu create [project-name]

Você precisará escolher o tipo de projeto:

  • Advanced - Estrutura mais completa com db, jwt, cron, migration, test, etc.
  • Basic - Estrutura básica.

Após isso, seu projeto será criado, conforme imagem abaixo.

Ao entrar na pasta do seu projeto, você terá uma estrutura inicial da seguinte forma:

.
├── LICENSE
├── README.md
├── README_zh.md
├── cmd
│   └── server
│       ├── main.go
│       ├── wire.go
│       └── wire_gen.go
├── config
│   ├── local.yml
│   └── prod.yml
├── go.mod
├── go.sum
├── internal
│   ├── handler
│   │   ├── handler.go
│   │   └── user.go
│   ├── middleware
│   │   └── cors.go
│   ├── model
│   │   └── user.go
│   ├── repository
│   │   ├── repository.go
│   │   └── user.go
│   ├── server
│   │   └── http.go
│   └── service
│       ├── service.go
│       └── user.go
├── pkg
│   ├── config
│   │   └── config.go
│   ├── helper
│   │   ├── convert
│   │   │   └── convert.go
│   │   ├── md5
│   │   │   └── md5.go
│   │   ├── resp
│   │   │   └── resp.go
│   │   ├── sid
│   │   │   └── sid.go
│   │   └── uuid
│   │       └── uuid.go
│   ├── http
│   │   └── http.go
│   └── log
│       └── log.go
└── storage
    └── logs
        └── server.log

Definições dos diretórios:

  • cmd: Através do arquivo server/main.go, presente nesta pasta, ocorre o bootstrap da aplicação.
  • config: Contém nossos arquivos de configuração com definições de porta, segurança, banco de dados e logs.
  • internal: Aqui estão as principais implementações de nossa aplicação, como handlers, services, models.
    • handler: Definições dos nossos controllers.
    • middleware: Contém nossos middlewares, como: CORS, Authentication, Logging, Caching, Request Tracing.
    • model: Estrutura com definição das entidades utilizadas no banco de dados.
    • repository: Contém as implementações da camada de acesso aos dados.
    • server: Contém as definições das rotas da aplicação, mapeando as mesmas para os handlers.
    • service: Camada com as definições das regras de negócio da aplicação.
  • pkg: Contém pacotes independentes que fornecem alguns utilitários para aplicação.
  • storage: Diretório para armazenamento de arquivos estáticos, como: log, arquivos de upload, arquivos temporários, etc.

Por padrão, o em nosso scaffolding já contamos com um componente user (handler/service/repository/model) criado.

Novos componentes podem ser criados através da linha de comando, usando:

nunu create handler company
nunu create service company
nunu create repository company
nunu create model company

ou

nunu create all company

Esses comandos criarão componentes denominados CompanyHandler, CompanyService, CompanyRepository e CompanyModel, respectivamente, e os colocarão nos diretórios corretos.

Executando o projeto

Agora que já conhecemos a estrutura da nossa aplicação, podemos executar a mesma através do comando:

nunu run

Ao abrir o navegador em: http://localhost:8000/ veremos nossa aplicação em execução!

Conclusão

A principal vantagem em utilizar o Nunu é que você já tem definida uma boa estrutura para seu projeto, sendo possível iniciar o desenvolvimento com uma etapa já concluída.