概念定义:
全局变量:
- 定义:在函数外部的变量称为全局变量
- 作用域:同一个包内的任何地方
局部变量:
- 定义:定义在{}里面的变量为局部变量
- 作用域:只能在{}里面有效;执行到定义的那句话,开始分配内存空间,离开作用域自动进行释放
问题描述:
:=
:=
package dbops
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
"log"
)
var (
dbConn *sql.DB
err error
)
func init() {
dbConn, err := sql.Open("mysql","root:000000@tcp(localhost:3306)/server?charset=utf8")
if err != nil{
panic(err.Error())
}
log.Println(dbConn)
}
func main() {
log.Println("查看全局变量dbConn:",dbConn)
}
在这里我们用的是 := 给全局变量赋的值,结果是全局变量并未赋值成功。执行会报错。
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x0 pc=0x5b0a61]
原因分析:
:=
解决方法:
将 := 用 = 替换
dbConn, err = sql.Open("mysql","root:000000@tcp(localhost:3306)/server?charset=utf8")
达到预期目的。
归纳总结:
:=:=
要对全局变量,局部变量有明确清晰的认知,使用起来就能够游刃有余,得心应手。