不允许Golang导入周期

时间:2016-07-16 16:03:19

标签: 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)

    }

这很简单,但问题是,一旦我想在该语句中更改某些内容,那么我必须为具有该语句的所有其他方法更改它。我试图做一个依赖注入或那种性质的东西,以便我可以在一个地方有这个声明或值,只是引用它。我得到的导入周期不允许出错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)

}

注意我有导入 ../ Config Config.Connect 但是当我编译时我不允许导入循环。我一直试图解决这个问题,但还没有能够解决这个问题。

2 个答案:

答案 0 :(得分:5)

我得到了同样的错误。但就我而言,我在文件中导入了包本身。所以你可以检查你是否犯了同样的错误。

答案 1 :(得分:3)

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