我在GO中创建了一个restful api,每个方法基本上都与数据库交互.我用来打开数据库连接的具体语句是
db,err := sql.Open("postgres", "user=postgres password=password dbname=dbname sslmode=disable")
if err != nil {
log.Fatal(err)
println(err)
}
Run Code Online (Sandbox Code Playgroud)
这很简单,但问题是,一旦我想在该语句中更改某些内容,那么我必须为具有该语句的所有其他方法更改它.我试图做一个依赖注入或那种性质的东西,以便我可以在一个地方有这个声明或值,只是引用它.我得到一个导入周期不允许错误,但不允许导入周期.这是我的项目结构
我所做的是在Config.go中我写了这个
package Config
const Connect = "user=postgres password=password dbname=dbname sslmode=disable"
Run Code Online (Sandbox Code Playgroud)
然后在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)
}
Run Code Online (Sandbox Code Playgroud)
注意我有导入../Config和Config.Connect但是当我编译时,我得到导入循环不允许.我一直试图解决这个问题,但一直无法解决.
是的,Go 不允许循环导入。在您的示例中,您有 2 个包配置和控制器。当你构建代码时,Controllers 包需要 Config 包,然后 Config 需要 Controllers,它是无止境的。您应该重构您的代码,使 Config 包与 Controllers 分离,并且仅供其使用。此外,您可以制作一些通用包,导入到控制器和配置中。