我正在写一个服务,其中我的学生从一个UUID与PostgreSQL。我选择pgx(https://github.com/jackc/pgx)作为驱动程序。我已经完全调试了我的程序,似乎在我调用row.Scan
之后没有调用任何东西。我的连接工作正常,我能够与数据库交互(用插入测试)。连接URI具有被授予所有权限的用户,因此这不是问题。下面是我的函数定义:
func (r *StudentPgRepo) GetStudentById(uuid *uuid.UUID) (*aggregate.Student, error) {
row := r.pool.QueryRow(context.Background(), "SELECT * FROM students WHERE student_id = $1", uuid.String())
student := new(aggregate.Student)
if err := row.Scan(
&student.Id, &student.FName, &student.LName, &student.PwHash, &student.Created,
&student.Updated, &student.P1.FName, &student.P1.LName, &student.P1.Email,
&student.P2.FName, &student.P2.LName, &student.P2.Email, &student.ParentDetails,
&student.Timezone, &student.Country, &student.State, &student.City, &student.Age,
&student.Gender, &student.Race, &student.NewStudent, &student.MealAssistance,
); err != nil {
if err == pgx.ErrNoRows {
return nil, ErrStudentNotFound
}
return nil, err
}
return student, nil
}
请让我知道如果有任何其他细节,我应该提供。谢谢你。
下面是我的函数调用:
if err != nil {
panic(err)
}
defer dbpool.Close()
r, err := student.NewStudentPgRepo(dbpool)
if err != nil {
panic(err)
}
uid := uuid.New()
_, err = r.GetStudentById(&uid)
if err != nil {
panic(err)
}
1条答案
按热度按时间y53ybaqx1#
可能,这不会解决您的问题,因为我们需要深入研究它与更多的信息。然而,我的代码工作,可以作为你的起点。在下面,你可以找到它:
我使用以下命令运行PostgreSQL示例:
在DB中,我用下面的脚本手动创建了一个表:
然后,我添加了两个记录只是为了演示。
如果这样可以解决你的问题,那就好了,否则通过添加缺少的细节来编辑问题,我会尝试深入研究。让我知道,谢谢!
编辑-连接池
我刚刚通过使用
github.com/jackc/pgx/v5/pgxpool
包提供的连接池特性更新了代码。代码非常相似,它像以前一样工作。如果您有任何其他问题,请告诉我,谢谢!