在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/GO/ 為啥在init函數(shù)中使用的變量在main函數(shù)中沒(méi)法得到的是nil?

為啥在init函數(shù)中使用的變量在main函數(shù)中沒(méi)法得到的是nil?

package main

import (
    "database/sql"
    _ "-/github.com/go-sql-driver/mysql"
    "log"
    "fmt"
)

var Db *sql.DB

func init()  {
    Db , err := sql.Open("mysql","root:root@tcp(localhost:3306)/sql")
    if err != nil {
        log.Fatal(err)
    }
    Db.Ping()
    fmt.Println(Db)
}

func main()  {
    fmt.Print(Db)
}

打印數(shù)據(jù)

&{0x6edcd8 root:root@tcp(localhost:3306)/sql 0 {0 0} [0xc0420c2000] map[] 0 1 0xc042040120 false map[0xc0420c2000:map[0xc0420c2000:true]] map[] 0 0 0 <nil>}
<nil>
回答
編輯回答
慢半拍

你現(xiàn)在init 中的Db是一個(gè)局部變量,并不是你var聲明的Db

package main

import (
    "database/sql"
    _ "-/github.com/go-sql-driver/mysql"
    "log"
    "fmt"
)

var Db *sql.DB

func init()  {
    var err error  // 首先聲明出來(lái)err
    Db , err = sql.Open("mysql","root:root@tcp(localhost:3306)/sql")
    if err != nil {
        log.Fatal(err)
    }
    Db.Ping()
    fmt.Println(Db)
}

func main()  {
    fmt.Print(Db)
}

這樣就可以了

2017年11月26日 11:30
編輯回答
半心人

這段代碼,可以體現(xiàn)go 的:= 塊級(jí)作用域特性

代碼:

func main() {
    for i := 0; i < 3; i++ {
        for i := 0; i < 3; i++ {
            fmt.Println(i)
        }
    }
}

輸出:

0
1
2
0
1
2
0
1
2
2018年1月3日 21:11