0

将项目迁移到“ github.com/jackc/pgx/pgxpool ”后,每个查询都有一个错误:

expected 0 arguments, got 1

我注意到扫描时发生错误

这是简单的代码块:

sql := `SELECT location FROM tb_champ WHERE is_active = true LIMIT 1;`
var location string
row := app.Repo.QueryRow(sql)
fmt.Printf("%T\n %v\n\n", row, row)
err = row.Scan(&location)
if err != nil {
    fmt.Println(err)
}
fmt.Println(location)

这是输出:

*pgx.connRow
&{0xc0000b2048 0xc000152240 0xc0001441e0 [] 0 0xc0000a26c0 [] {13797143304121583776 6737745 0x1a8c9c0} SELECT location FROM tb_champ WHERE is_active = true LIMIT 1; [[]] true <nil> <nil>}

expected 0 arguments, got 1

我的应用结构:

type App struct {
   Config       *Config
   Logger       *Logger
   Repo         Repository
}

...

type Repository interface {
   Exec(query string, args ...interface{}) (pgconn.CommandTag, error)
   Query(query string, args ...interface{}) (pgx.Rows, error)
   QueryRow(query string, args ...interface{}) pgx.Row
   Close() error
}

PGRepository 实现存储库:

type PGRepository struct {
    *pgxpool.Pool
}

...这是 QueryRow 实现:

func (pg *PGRepository) QueryRow(query string, args ...interface{}) pgx.Row {
   tx, err := pg.Begin(context.Background())
   if err != nil {
       return nil
   }
   defer tx.Rollback(context.Background())

   res := tx.QueryRow(context.Background(), query, args)
   if err != nil {
       return nil
   }

   err = tx.Commit(context.Background())
   if err != nil {
       return nil
   }

   return res
}

需要帮忙!我不明白哪些论点是错误的?如何修复此错误?

@mkopriva 评论后(对我的代码感到羞耻):

res := tx.QueryRow(context.Background(), query, args)

变成

res := tx.QueryRow(context.Background(), query, args...)

参数错误消失了。但是现在tx.Commit出现了一些问题:conn busy

4

0 回答 0