为什么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)
}
}
答案 0 :(得分:2)
使用:=
,您将在db
范围内声明一个新的main()
变量,而不是在程序包范围内将其分配给db
变量。
您只能使用=
或使用db
以外的其他名称。
尝试一下:
var err error
db, err = sql.Open("postgres", os.Getenv("ELEPHANTSQL_URL"))