Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

[Dúvida] Erro import cycle not allowed e could not import github.com/lib/pq

Olá tudo bem?

Estou com problemas Go: crie uma aplicação web Go: crie uma aplicação web - grade 02, aula 02 Erro no problems no console

import cycle not allowed

could not import github.com/lib/pq (missing metadata for import of "github.com/lib/pq")

Meu projeto fica em C:\Users\MAX\Go\Max

Em C:\Users\MAX\Go Fica as pastas padrões src, bin , pkg e a minha (Max)

Meu código é pequeno

package main

import (
    "html/template"
    "net/http"

    _ "github.com/lib/pq"
)

var temp = template.Must(template.ParseGlob("templates/*.html"))

func main() {
    http.HandleFunc("/", index)
    http.ListenAndServe(":8000", nil)

}

func index(w http.ResponseWriter, r *http.Request) {
    produtos := []Produto{
        {Nome: "Camiseta", Descricao: "Azul", Preco: 39, Quantidade: 5},
        {"Tenis", "Confortavel", 100, 4},
        {"Fone", "Muito bom", 54, 2},
        {"Papel", "Branco", 10, 4},
    }

    temp.ExecuteTemplate(w, "Index", produtos)
}

type Produto struct {
    Nome       string
    Descricao  string
    Preco      float64
    Quantidade int
}

Tentei algumas soluções como

go mod init
go mod tidy
go get github.com/lib/pq
go install github.com/lib/pq@latest

Mas sem solução, alguem pode ajudar um noob ? obrigado!

5 respostas

Olá Max, tudo bem?

Pelo que você descreveu e pela imagem, você está enfrentando dois problemas principais:

  1. Import cycle not allowed
  2. Could not import github.com/lib/pq (missing metadata for import of "github.com/lib/pq")

1. Import cycle not allowed

Esse erro geralmente ocorre quando há um ciclo de importação, ou seja, um pacote A importa um pacote B, que por sua vez importa o pacote A. No seu código, não parece haver um ciclo de importação direto. Contudo, é sempre bom verificar se não há algum problema nas dependências.

2. Could not import github.com/lib/pq

Esse erro indica que o Go não está conseguindo encontrar o pacote github.com/lib/pq. Vamos tentar resolver isso passo a passo.

Passos para resolver

  1. Verifique o módulo Go

    Certifique-se de que você está no diretório correto do seu projeto e que o módulo Go está inicializado corretamente. Execute os seguintes comandos no terminal:

    cd C:\Users\MAX\Go\Max
    go mod init max
    go mod tidy
    
  2. Instale a dependência

    Depois de inicializar o módulo, instale a dependência github.com/lib/pq:

    go get github.com/lib/pq
    
  3. Verifique o arquivo go.mod

    Certifique-se de que o arquivo go.mod contém a dependência github.com/lib/pq. Ele deve ser algo parecido com:

    module max
    
    go 1.17
    
    require github.com/lib/pq v1.10.4 // ou a versão mais recente
    
  4. Verifique o código

    Certifique-se de que o código não tem importações cíclicas. No seu caso, parece estar tudo certo, mas é sempre bom revisar.

  5. Atualize e limpe o cache

    Às vezes, o cache do Go pode causar problemas. Tente limpar e atualizar o cache:

    go clean -modcache
    go mod tidy
    

Depois de seguir esses passos, tente compilar e rodar seu projeto novamente:

go run main.go

Tem esse tópico com um erro semelhante. Veja se ele te ajuda de alguma forma: Erro ao importar _ "github.com/lib/pq" - SOLUCIONADO

Espero ter ajudado e bons estudos!

Opa Renan, obrigado pelo retorno segue os testes que solicitou

MAX@DESKTOP-HU2CUUR MINGW64 ~ $ cd Go/Max/

MAX@DESKTOP-HU2CUUR MINGW64 ~/Go/Max $ pwd /c/Users/MAX/Go/Max

MAX@DESKTOP-HU2CUUR MINGW64 ~/Go/Max $ go mod init max go: C:\Users\MAX\Go\Max\go.mod already exists

MAX@DESKTOP-HU2CUUR MINGW64 ~/Go/Max $ go mod tidy

MAX@DESKTOP-HU2CUUR MINGW64 ~/Go/Max $ go get github.com/lib/pq

Todos acima nao retornaram nenhum erro OK!

Agora meu go.mod (Eu cheguei a mexer nele vendo outras dicas entao esse nao sei se esta mais correto entao fiz o passo do site de apagar e fazer novamente)

module max

go 1.22.5

require github.com/lib/pq v1.10.9

Acho que daqui para cima ficou OK é mais retornando suas perguntas /\

Parece que o erro da lib corrigiu.

Agora estou com undeclaredname na produtos.go "models)

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

Coloquei só um dos 3 pois sao as mesmas chamadas (Criar/Deletar/Buscar)

package models

type Produto struct { Id int Nome string Descricao string Preco float64 Quantidade int }

func CriaNovoProduto(nome, descricao string, preco float64, quantidade int) { db := db.ConectaComBancoDeDados()

insereDadosNoBanco, err := db.Prepare("insert into produtos(nome, descricao, preco, quantidade) values($1, $2, $3, $4)")
if err != nil {
    panic(err.Error())
}

insereDadosNoBanco.Exec(nome, descricao, preco, quantidade)
defer db.Close()

}

olhando o projeto pronto do professor ele usa esse import import "github.com/alura/db"

como faço isso local? nao cheguei a por nada no github!

att,

solução!

Olá Max.

Que bom que você conseguiu resolver o problema com a lib github.com/lib/pq. Sobre o erro de "undeclared name" na produtos.go, parece que o Go não está reconhecendo a referência ao pacote db que você mencionou. Isso provavelmente está ocorrendo porque o pacote db que você está tentando importar não está disponível no seu projeto local.

Como resolver:

  1. Verifique o Import Local: Se você não tem um repositório no GitHub ou outro repositório online, você pode tentar criar um pacote local para db. Para isso, siga os passos abaixo:

    • Crie uma pasta chamada db dentro do diretório do seu projeto, C:\Users\MAX\Go\Max.
    • Dentro dessa pasta, crie um arquivo chamado db.go.
    • Implemente a função ConectaComBancoDeDados() nesse arquivo db.go.

    O código dentro de db.go pode ser algo assim:

    package db
    
    import (
        "database/sql"
        _ "github.com/lib/pq"
    )
    
    func ConectaComBancoDeDados() *sql.DB {
        conexao := "user=postgres dbname=loja password=1234 host=localhost sslmode=disable"
        db, err := sql.Open("postgres", conexao)
        if err != nil {
            panic(err.Error())
        }
        return db
    }
    
  2. Atualize os Imports no Código: Agora, na sua produtos.go, você pode importar o pacote local assim:

    package models
    
    import "max/db"
    
    // Funções e structs aqui...
    
  3. Organize o Código: Certifique-se de que todos os arquivos do seu projeto estão organizados em pastas e pacotes corretos. Isso inclui os templates, o código do servidor web, e o código de banco de dados.

  4. Rodando o Projeto: Depois de fazer essas alterações, tente rodar o projeto novamente usando:

    go run main.go
    

Se precisar de mais alguma coisa, estarei por aqui para ajudar. Bons estudos!

Opa Renan,

Mais uma vez deu certo Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Agora ao executar go run main.go parece nao encontrar a pagina localhost:8000 404 page not found

Caso consiga sugerir ou se precisa que eu abra um novo topico me sinalize por favor!

Agradeço por toda ajuda1

att,

Nesse print a mensagem fala que não tem mais problemas(erros) na área de trabalho. Tenta acompanhar com o curso agora, ou refazer os processos, para ver se não faltou nenhuma etapa.