1 回答

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊
您的各種功能中至少有兩個(gè)問(wèn)題。Init()
您正在使用在函數(shù)作用域內(nèi)聲明新變量的函數(shù),并且不修改在作用域外聲明的變量。
:=
您正在使用內(nèi)部,這是在返回時(shí)將執(zhí)行延遲函數(shù)的地方。從本質(zhì)上講,這意味著您創(chuàng)建然后銷毀資源,使其對(duì)任何后續(xù)代碼都無(wú)用。
defer
Init()
Init()
Init
如果要賦值給在外部作用域中聲明的變量,請(qǐng)不要使用 ,而是使用 。如果您打算在初始化函數(shù)外部使用,請(qǐng)不要在初始化函數(shù)內(nèi)執(zhí)行某些操作。:=
=
defer conn.Close()
conn
var Say *zap.Logger
func Init() {
Say, _ = zap.NewProduction()
}
var Conn *pgxpool.Pool
func Init() {
c, err := pgxpool.Connect(context.Background(), env.Conf["DATABASE_URL"])
if err != nil {
logger.Say.Fatal("Can't connect to DB", zap.String("Details", err.Error()))
} else {
logger.Say.Info("Connected to Database")
}
Conn = c
var greeting string
err = Conn.QueryRow(context.Background(), "select 'Hello, this is db!'").Scan(&greeting)
if err != nil {
logger.Say.Error("DB Query failed", zap.String("Details", err.Error()))
}
logger.Say.Info("Connected to DB. DB says; ", zap.String("Details", greeting))
}
func init() {
logger.Init()
env.Init()
db.Init()
}
func main() {
defer func() {
db.Conn.Close()
logger.Say.Sync()
}()
app := fiber.New()
app.Get("/", func(c *fiber.Ctx) error {
return c.SendString("Hello, World!")
})
log.Fatal(app.Listen(":3000"))
}
- 1 回答
- 0 關(guān)注
- 88 瀏覽
添加回答
舉報(bào)