Golang中使用db.Close()无法关闭数据库连接怎么办
Golang中使用db.Close()无法关闭数据库连接怎么办 大家好,
我正在尝试设置一个数据库连接,并希望在最后使用 defer db.DB.Close() 或 db.Close(),但两者对我来说都不起作用。
在我的以下代码中,它告诉我:未解析的引用 ‘Close’。
有人能帮我解决这个问题吗?那将非常棒 🙂
package database
import (
"github.com/joho/godotenv"
"gorm.io/driver/postgres"
"gorm.io/gorm"
"log"
"os"
)
var db *gorm.DB
func LoadingEnv() {
err := godotenv.Load()
if err != nil {
log.Fatal("Error loading EnvFile")
}
}
func InitDatabase() {
LoadingEnv()
dbConnStr := os.Getenv("DB_CONN_STR")
if dbConnStr == "" {
log.Fatal("Wrong ConnectionString")
}
var err error
db, err = gorm.Open(postgres.Open(dbConnStr), &gorm.Config{})
if err != nil {
log.Fatal("Error opening DB connection")
}
defer db.DB.Close() // Access the underlying sql.DB instance and call Close
}
干杯
更多关于Golang中使用db.Close()无法关闭数据库连接怎么办的实战教程也可以访问 https://www.itying.com/category-94-b0.html
4 回复
感谢两位,你们真的帮了我很多 😊
抱歉回复晚了。
祝大家周末愉快。
更多关于Golang中使用db.Close()无法关闭数据库连接怎么办的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
- 请参考您所使用的特定数据库交互库或框架。关闭连接的方法可能与
db.Close()不同。例如,在使用 Postgres 的 Gorm v2 中,没有db.Close()方法,而是使用DB()来获取底层连接。
在Golang中,gorm.DB 不直接提供 Close() 方法。要关闭数据库连接,你需要通过 DB() 方法获取底层的 *sql.DB 实例,然后调用其 Close() 方法。以下是修正后的代码:
package database
import (
"github.com/joho/godotenv"
"gorm.io/driver/postgres"
"gorm.io/gorm"
"log"
"os"
)
var db *gorm.DB
func LoadingEnv() {
err := godotenv.Load()
if err != nil {
log.Fatal("Error loading EnvFile")
}
}
func InitDatabase() {
LoadingEnv()
dbConnStr := os.Getenv("DB_CONN_STR")
if dbConnStr == "" {
log.Fatal("Wrong ConnectionString")
}
var err error
db, err = gorm.Open(postgres.Open(dbConnStr), &gorm.Config{})
if err != nil {
log.Fatal("Error opening DB connection")
}
// 获取底层 sql.DB 实例
sqlDB, err := db.DB()
if err != nil {
log.Fatal("Error getting sql.DB instance")
}
defer sqlDB.Close()
}
如果你需要在其他地方关闭连接,可以创建一个专门的关闭函数:
func CloseDatabase() error {
if db != nil {
sqlDB, err := db.DB()
if err != nil {
return err
}
return sqlDB.Close()
}
return nil
}
然后在主函数中使用:
func main() {
database.InitDatabase()
defer database.CloseDatabase()
// 你的业务逻辑代码
}
这样就能正确关闭数据库连接了。

