直接贴代码
package mysql
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
"os"
)
var db *sql.DB
func init() {
var err error
db, err = sql.Open("mysql", "root:Haishen123@tcp(127.0.0.1:3306)/fileserver?charset=utf8")
// #####################
//db, err := sql.Open("mysql", "root:Haishen123@tcp(127.0.0.1:3306)/fileserver?charset=utf8")
// 这样写的话, db将会是init中创建的局部变量,而不是全局的db
// ####################
if err != nil {
fmt.Println(err.Error())
return
}
db.SetConnMaxLifetime(1000)
err = db.Ping()
if err != nil {
fmt.Println("Failed to connect to mysql, err: %s", err.Error())
os.Exit(1)
}
}
func DBConn() *sql.DB {
return db
}
如代码注释所示,如果按照注释的中的写法连接mysql的话,那么db将会是init函数中创建的局部变量,而定义在包全局的db任然是nil。所以我只能先创建一个err,在连接的sql的时候不使用:=来赋值。
请问老师,:= 这种赋值方式,是怎么判断是否要新创建一个变量的呢?