1 回答
TA贡献1946条经验 获得超4个赞
您没有正确初始化包级db
变量。
:=
称为“短变量声明”的运算符在其块范围内声明并初始化一个新变量。在外部作用域中具有相同名称的任何变量都将被“隐藏”。
要正确初始化包级变量,您可以使用普通赋值:
var db *sql.DB
func init() {
args := fmt.Sprintf("host=%s port=%d dbname=%s user='%s' password=%s sslmode=%s", "localhost", 5432, "bookstore", "santosh", "dts123", "disable")
var err error
db, err = sql.Open("postgres", args)
if err != nil {
fmt.Printf("Creating Database %s", err)
}
// ...
}
或者您可以使用:=但随后使用不同的变量名称并确保将其用于分配:
var db *sql.DB
func init() {
args := fmt.Sprintf("host=%s port=%d dbname=%s user='%s' password=%s sslmode=%s", "localhost", 5432, "bookstore", "santosh", "dts123", "disable")
_db, err := sql.Open("postgres", args)
if err != nil {
fmt.Printf("Creating Database %s", err)
}
// ...
db = _db // set "global"
}
- 1 回答
- 0 关注
- 108 浏览
添加回答
举报