我是Golang语言的新手,我来自Nodejs,在那里访问数据库和在http请求处理程序中操作db是相当简单的。现在我想在Golang中做同样的事情,但我不能从处理程序中访问db变量。假设我想从postgres数据库中获得用户的get请求。
func getHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "get req made")
rows, error := db.Query("SELECT id, name, age FROM new_table LIMIT $1", 4)
if error != nil {
panic(error)
}
defer rows.Close()
for rows.Next() {
var id int
var name string
var age int
error = rows.Scan(&id, &name, &age)
if error != nil {
panic(error)
}
fmt.Println(id, name, age)
}
error = rows.Err()
if error != nil {
panic(error)
}
}```
And i get error: undeclared name: db, if i use this code inside the main function where the db connection is located, its working fine.
How can i use the db variable outside the scope where its declared?
2条答案
按热度按时间8cdiaqws1#
当你试图连接到数据库时,你的
db
变量可能是在你的主函数中创建的,问题是,db
变量的作用域只在你的主函数中,所以为了工作,你需要在包级别全局声明它。所以在你的main.go中声明一个main函数之外的变量,然后在任何地方使用它。
但是如果你使用全局变量,你必须检查它是否支持多线程访问,你的数据库连接会工作的很好,但是你必须阅读一些关于变量作用域和互斥锁的教程。
pkwftd7m2#
如果db来自另一个包,请确保它具有公共访问权限。您需要以大写字母开头,例如Db
这是一个基本的数据库函数,位于www.example.com上的一个单独文件中gorm.io