作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有两个包,main
和 db
。但是,我收到 “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/
我是一名优秀的程序员,十分优秀!