1 回答

TA貢獻1946條經(jīng)驗 獲得超4個贊
您沒有正確初始化包級db
變量。
:=
稱為“短變量聲明”的運算符在其塊范圍內(nèi)聲明并初始化一個新變量。在外部作用域中具有相同名稱的任何變量都將被“隱藏”。
要正確初始化包級變量,您可以使用普通賦值:
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 關(guān)注
- 148 瀏覽
添加回答
舉報