登录
首页 >  Golang >  Go问答

ent.go 报告:数据库已在所有查询中关闭

来源:stackoverflow

时间:2024-02-26 19:06:29 483浏览 收藏

你在学习Golang相关的知识吗?本文《ent.go 报告:数据库已在所有查询中关闭》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

db/db.go

func dbclient(cfg *config.config, logger log.logger) *ent.client {
    // "host=<host> port=<port> user=<user> dbname=<database> password=<pass>"
    psqlinfo := fmt.sprintf("host=%s port=%s user=%s dbname=%s password=%s",
        cfg.db_host, cfg.db_port, cfg.db_user, cfg.db_name, cfg.db_pass)
    client, err := ent.open("postgres", psqlinfo)
    if err != nil {
        logger.fatal(err)
    }
    defer client.close()
    logger.info("database connected")
    if err := client.schema.create(context.background()); !errors.is(err, nil) {
        logger.fatalf("error: failed creating schema resources %v\n", err)
    }

    return client
}

services/userservice.go

func CreateUser(client *ent.Client, input *model.NewUser) (*ent.User, error) {
    user, err := client.Debug().User.Create().SetName(input.Name).SetUsername(input.Username).SetEmail(input.Email).SetPassword(input.Password).Save(context.Background())
    if err != nil {
        return &ent.User{}, err
    }
    return user, nil
}

ent 客户端创建所有必要的表并显示数据库已连接。 但是当我执行 createuser() 时,它返回 sql: 数据库已关闭 。谁能告诉我为什么会这样?


正确答案


引导代码中有一个数据库连接 clos​​e 调用:

func dbclient(cfg *config.config, logger log.logger) *ent.client {
  // "host=<host> port=<port> user=<user> dbname=<database> password=<pass>"
  psqlinfo := fmt.sprintf("host=%s port=%s user=%s dbname=%s password=%s",
cfg.db_host, cfg.db_port, cfg.db_user, cfg.db_name, cfg.db_pass)
  client, err := ent.open("postgres", psqlinfo)
  if err != nil {
      logger.fatal(err)
  }
  defer client.close() // <- this one
  logger.info("database connected")
  if err := client.schema.create(context.background()); !errors.is(err, nil) {
    logger.fatalf("error: failed creating schema resources %v\n", err)
  }
  return client
}

此调用在返回 client 后关闭连接。 如果需要关闭连接,请从 createuser() 函数中关闭它。

func CreateUser(client *ent.Client, input *model.NewUser) (*ent.User, error) {
    user, err := client.Debug().User.Create().SetName(input.Name).SetUsername(input.Username).SetEmail(input.Email).SetPassword(input.Password).Save(context.Background())
    if err != nil {
        return &ent.User{}, err
    }
    defer client.Close() // <- here
    return user, nil
}

理论要掌握,实操不能落!以上关于《ent.go 报告:数据库已在所有查询中关闭》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>