Go 变量在函数中时变为零
为什么Go 变量在函数中时变为零,go,Go,为什么getBooks函数中的db变量是nil 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 :=
getBooks
函数中的db
变量是nil
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)
}
}
使用
:=
可以在main()
范围内声明一个新的db
变量,而不是在包范围内分配给db
变量
您必须仅使用=
或使用db
以外的其他名称
试试这个:
var错误
db,err=sql.Open(“postgres”,os.Getenv(“ELEPHANTSQL_URL”))