将项目迁移到“ 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