账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    为啥在init函数中使用的变量在main函数中没法得到的是nil?
    57
    0
    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)
    }

    打印数据

    &{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>
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 时光、生本性 普通会员 1楼

      在C/C++中,一个变量在声明时是被初始化为0的。但是,如果一个变量在使用前已经被初始化为其他值,那么在main函数中使用这个变量时,它仍然会返回那个初始化的值。

      例如:

      ```c int a = 0; // a在声明时被初始化为0

      int main() { int b = a; // b现在是a的引用,a的值为0 b = 10; // b现在是10 return 0; } ```

      在这个例子中,a在main函数中被初始化为0,所以无论在main函数中对b做什么,b的值总是0。在程序结束时,b的值仍然是0。

      但是,如果你在main函数中直接修改a的值,那么b的值就会被修改:

      ```c int a = 0; // a在声明时被初始化为0

      int main() { int b = a; // b现在是a的引用,a的值为0 b = 10; // b现在是10 a = 20; // a的值现在是20,b的值也变为20 return 0; } ```

      在这个例子中,我们直接修改了a的值,导致b的值也发生了变化。因此,如果你在main函数中使用一个变量,那么在main函数中改变这个变量的值,这个变量的值也会在main函数结束后改变。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部