我正在 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 这样的错误,但我收到了不允许导入周期的错误.这是我的项目结构
我所做的是在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 ../Config 和 Config.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/