在函数内部时变量变为零

时间:2019-03-02 14:46:29

标签: go

为什么db函数中的nil变量是getBooks

package main

import (
    ...
)

var db *sql.DB

func init() {
    gotenv.Load()
}

func main() {

    db, err := sql.Open("postgres", os.Getenv("ELEPHANTSQL_URL"))
    err = db.Ping()
    fmt.Println(db, err)

    router := mux.NewRouter()
    router.HandleFunc("/books", getBooks).Methods("GET")
    log.Fatal(http.ListenAndServe("localhost:8000", router))
}

func getBooks(w http.ResponseWriter, r *http.Request) {
    if db == nil {
        log.Print("!!!!!!!!!!")
        os.Exit(2)
    }
}

1 个答案:

答案 0 :(得分:2)

使用:=,您将在db范围内声明一个新的main()变量,而不是在程序包范围内将其分配给db变量。

您只能使用=或使用db以外的其他名称。

尝试一下:

var err error
db, err = sql.Open("postgres", os.Getenv("ELEPHANTSQL_URL"))