1 回答
TA贡献1765条经验 获得超5个赞
您的各种功能中至少有两个问题。Init()
您正在使用在函数作用域内声明新变量的函数,并且不修改在作用域外声明的变量。
:=您正在使用内部,这是在返回时将执行延迟函数的地方。从本质上讲,这意味着您创建然后销毁资源,使其对任何后续代码都无用。
deferInit()Init()Init
如果要赋值给在外部作用域中声明的变量,请不要使用 ,而是使用 。如果您打算在初始化函数外部使用,请不要在初始化函数内执行某些操作。:==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 关注
- 98 浏览
添加回答
举报
