1
resposta

Criação de subpastas dentro de um package

Bom dia, tudo bem?

Estou com uma dúvida, é possível criar subpastas dentro de um package igual a foto abaixo?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Eu expus a variavel db no package handler (arquivo handler.go) e gostaria de acessar essa variavel do arquivo showPayees por exempllo, ambos estão dentro do package handler, porém o arquivo showPayees.go coloquei dentro de uma subpasta handler/payee pra ficar mais organizado visto que vou ter mais de um arquivo pra cada schema.

Porém, quando faço isso eu não consigo acessar a variavel db que eu expus no handler.go, só consigo usa-la se eu deixar o showPayees.go fora da subpasta payee que criei.

É possível no go ter esse tipo de organização?

1 resposta

Olá, Carlos! Tudo bem?

No Go, é possível organizar seu código em subdiretórios, mas é importante entender como o Go trata os pacotes. Cada diretório deve ser considerado um pacote separado, mesmo que esteja dentro de outro pacote. Isso significa que, se você criar uma subpasta em um pacote, essa subpasta será tratada como um pacote diferente.

Para acessar a variável db que você expôs no handler.go a partir do showPayees.go dentro da subpasta, você precisa garantir que a variável db seja exportada (começando com uma letra maiúscula) e importá-la corretamente no arquivo da subpasta.

Aqui está um exemplo de como você pode fazer isso:

  1. No handler.go, exporte a variável db:

    package handler
    
    var (
        Logger *config.Logger
        DB     *gorm.DB // Use maiúscula para exportar
    )
    
    func InitializeHandler() {
        Logger = config.GetLogger("handler")
        DB = config.GetPostgres()
    }
    
  2. No showPayees.go, importe o pacote pai e use a variável exportada:

    package payee
    
    import (
        "github.com/seuprojeto/handler" // ajuste o caminho conforme necessário
        "github.com/gin-gonic/gin"
    )
    
    func ShowPayeesHandler(c *gin.Context) {
        // Agora você pode acessar handler.DB
        if err := handler.DB.Find(&payees).Error; err != nil {
            // Lide com o erro
        }
    }
    

Certifique-se de ajustar o caminho do pacote conforme a estrutura do seu projeto. Com isso, você deve conseguir acessar a variável DB a partir do showPayees.go.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.