不允许 Golang 导入循环

标签 go

我正在 GO 中创建一个 restful api,每个方法本质上都与数据库交互。我用来打开数据库连接的具体语句是

db,err := sql.Open("postgres", "user=postgres password=password dbname=dbname sslmode=disable")
    if err != nil {
        log.Fatal(err)
        println(err)

    }

这很简单,但问题是,一旦我想更改该语句中的某些内容,我就必须为具有该语句的所有其他方法更改它。我正在尝试进行依赖注入(inject)或类似性质的操作,以便我可以将该语句或值放在 1 个位置并仅引用它。尽管像 Import cycle not allowed 这样的错误,但我收到了不允许导入周期的错误.这是我的项目结构

enter image description here

我所做的是在Config.go中我写了这个

package Config

const Connect  = "user=postgres password=password dbname=dbname sslmode=disable"

然后在 Listings.go 中我把这个

package Controllers

import (
    "net/http"
    "database/sql"

       "../Config"

)

func Listing_Expiration(w http.ResponseWriter, r *http.Request)  {


        db,err := sql.Open("postgres",Config.Connect)

        if err != nil {
            log.Fatal(err)
            println(err)

}

注意我有 import ../ConfigConfig.Connect 但是当我编译时我得到 import cycle not allowed 。我一直在尝试解决这个问题,但未能成功。

最佳答案

是的,Go 不允许循环导入。在您的示例中,您有 2 个包 Config 和 Controllers。当你构建代码时,Controllers 包需要 Config 包,然后 Config 需要 Controllers 并且它是无止境的。您应该重构您的代码,使 Config 包与 Controller 分离,并且仅由它使用。另外,你可以做一些通用的包,导入到Controllers和Config。

关于不允许 Golang 导入循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38412950/

相关文章:

go - 你如何决定你的函数是否应该像接收器一样使用指针?

pointers - reflect.New 返回 <nil> 而不是初始化的结构

go - 转到http.FileServer不提供所有静态内容

unit-testing - 单元测试 Google 的 Go API 客户端

go - http.FileServer 在文件存在时总是 404

node.js - 如何生成 HMAC

http - Go Web 服务器的进程管理

go - golang,在2个模型之间创建关系,并使用gorm使用Preload检索它们

转到 "unrecognized imports"

go - 如何导入一个golang自带的包?