第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將連接參數(shù) db 傳遞給 main.go?

如何將連接參數(shù) db 傳遞給 main.go?

Go
慕無忌1623718 2023-06-01 15:04:17
我現(xiàn)在的作品有問題。我使用 beego 框架構(gòu)建了一個應(yīng)用程序,我是 golang 的新手。首先,我構(gòu)建了另一個名為 utils 的包,然后我從該包中編寫了一些代碼來訪問我的數(shù)據(jù)庫func InitFirebird() {    var (        dbDriver   = beego.AppConfig.String("DB_CONNECTION")        dbUsername = beego.AppConfig.String("DB_USERNAME")        dbPassword = beego.AppConfig.String("DB_PASSWORD")        dbServer   = beego.AppConfig.String("DB_HOST")        // dbPort     = beego.AppConfig.String("DB_PORT")        dbFileName = beego.AppConfig.String("DB_DATABASE")    )    conn, _ := sql.Open(dbDriver, dbUsername+":"+dbPassword+"@"+dbServer+"/"+dbFileName)    defer conn.Close()}之后,我轉(zhuǎn)到我的 main.go 并像這樣設(shè)置我的 init 函數(shù)和 main 函數(shù):func init() {    utils.InitFirebird()}func main() {    if beego.BConfig.RunMode == "dev" {        beego.BConfig.WebConfig.DirectoryIndex = true        beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger"        }    var n int    conn.QueryRow("SELECT Count(*) FROM rdb$relations").Scan(&n)    fmt.Println("Relations count=", n)    beego.Run()}當(dāng)我重新啟動我的應(yīng)用程序時,出現(xiàn)錯誤并向我提供此消息:\main.go:23:2: undefined: conn我該如何解決這個問題?Anyhelp將不勝感激
查看完整描述

1 回答

?
紅顏莎娜

TA貢獻1842條經(jīng)驗 獲得超13個贊

首先,如果你想從另一個包中訪問某些東西,它必須被導(dǎo)出。在 Go 中,如果你想導(dǎo)出一些東西,你可以用首字母大寫來命名它(在你的例子中,它應(yīng)該Conn代替conn)。


其次,當(dāng)你使用它時,defer它會在函數(shù)返回時被執(zhí)行。在您的情況下,它會立即返回,因此連接會立即關(guān)閉。


解決方案:


var Conn *sql.DB

func InitFirebird() {

? ? var (

? ? ? ? dbDriver? ?= beego.AppConfig.String("DB_CONNECTION")

? ? ? ? dbUsername = beego.AppConfig.String("DB_USERNAME")

? ? ? ? dbPassword = beego.AppConfig.String("DB_PASSWORD")

? ? ? ? dbServer? ?= beego.AppConfig.String("DB_HOST")

? ? ? ? // dbPort? ? ?= beego.AppConfig.String("DB_PORT")

? ? ? ? dbFileName = beego.AppConfig.String("DB_DATABASE")

? ? )

? ? Conn, _ = sql.Open(dbDriver, dbUsername+":"+dbPassword+"@"+dbServer+"/"+dbFileName)

}

現(xiàn)在在你的主包中:


func init() {

? ? utils.InitFirebird()

}


func main() {

? ? if beego.BConfig.RunMode == "dev" {

? ? ? ? beego.BConfig.WebConfig.DirectoryIndex = true

? ? ? ? beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger"

? ? ? ? }


? ? var n int

? ? defer utils.Conn.Close() // <-- Close here


? ? utils.Conn.QueryRow("SELECT Count(*) FROM rdb$relations").Scan(&n)

? ? fmt.Println("Relations count=", n)


? ? beego.Run()

}

這里Close()不會立即執(zhí)行,因為beego.Run()會阻塞。


PS: 不推薦使用全局變量傳遞數(shù)據(jù)庫連接。


查看完整回答
反對 回復(fù) 2023-06-01
  • 1 回答
  • 0 關(guān)注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號