gpt4 book ai didi

go - 如何在 Go 中将数据库连接初始化作为一个包分开?

转载 作者:IT王子 更新时间:2023-10-29 02:37:04 27 4
gpt4 key购买 nike

我有两个包,maindb。但是,我收到 “DB declared and not used” 错误。

db.go

package db

import (
"database/sql"
)

var DB *sql.DB

func Connect() {
DB, err := sql.Open("mysql", "root:xxxx@/xxxx")
if err != nil {
panic(err.Error())
}
}

func Close() {
DB.Close()
}

主.go

package main

import (
"database/sql"
// "fmt"
_ "github.com/go-sql-driver/mysql"
"html/template"
"net/http"
"github.com/****/****/config"
"github.com/****/****/db"
)

var tpl *template.Template

func init() {
tpl = template.Must(template.ParseGlob("templates/*.gohtml"))
}

func main() {
Connect()
defer Close()
loadRoutes()
http.ListenAndServe(":8080", nil)
}

最佳答案

Golang 对变量声明很严格,Golang FAQs 中也提到了这一点:

The presence of an unused variable may indicate a bug, while unused imports just slow down compilation, an effect that can become substantial as a program accumulates code and programmers over time. For these reasons, Go refuses to compile programs with unused variables or imports, trading short-term convenience for long-term build speed and program clarity.

不过,解决这种情况很容易。在开发过程中使用空白标识符让未使用的内容保留。

_, err := sql.Open("mysql", "root:Berlin2018@/jplatform")

但是由于您需要通过创建连接来获取数据库实例。我建议通过从函数返回来使用它,或者您可以通过将 ping 发送到数据库服务器来检查连接是否正常工作:

var DB *sql.DB

func Connect() {
DB, err := sql.Open("mysql", "root:Berlin2018@/jplatform")
if err = DB.Ping(); err != nil {
log.Panic(err)
}
}

或者您可以创建一个结构,您可以在任何地方使用它,包括为每个需要 db 连接以查询数据库的函数使用方法接收器

type Env struct {
db *sql.DB
}

func Connect() {
db, err := sql.Open("mysql", "root:Berlin2018@/jplatform")
_ = &Env{db: db}
}

func(env *Env) getDataFromDatabase(){}

关于go - 如何在 Go 中将数据库连接初始化作为一个包分开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51910459/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com