概念定义:

全局变量:

  • 定义:在函数外部的变量称为全局变量
  • 作用域:同一个包内的任何地方

局部变量:

  • 定义:定义在{}里面的变量为局部变量
  • 作用域:只能在{}里面有效;执行到定义的那句话,开始分配内存空间,离开作用域自动进行释放

   

问题描述:   

:=
:=
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")

       达到预期目的。

归纳总结:

:=:=

       要对全局变量,局部变量有明确清晰的认知,使用起来就能够游刃有余,得心应手。