我在扫描Golang的pgx
个查询时遇到问题.id字段始终是最后一条记录的id字段.如果我取消对函数顶部的var person声明的注释,则每个id都是3.我的数据库中有3条id为1到3的记录.当我对该声明进行注释并在rows.Next()
循环中声明变量时,我得到了正确的id.我不明白为什么personId
没有被正确覆盖
来自封送JSON的输出,在函数顶部声明var.
[{"person_id":3,"first_name":"Mark","last_name":"Brown"},{"person_id":3,"first_name":"Sam","last_name":"Smith"},{"person_id":3,"first_name":"Bob","last_name":"Jones"}]
在扫描循环的每个迭代中声明person后输出
第一名,最后一名:"{u"姓:"{u"姓:"{u"姓:"{u"姓:"{u":
我有这个 struct
// Person model
type Person struct {
PersonId *int64 `json:"person_id"`
FirstName *string `json:"first_name"`
LastName *string `json:"last_name"`
}
这是我的查询函数
func getPersons(rs *appResource, companyId int64) ([]Person, error) {
// var person Person
var persons []Person
queryString := `SELECT
user_id,
first_name,
last_name,
FROM users
WHERE company_id = $1`
rows, err := rs.db.Query(context.Background(), queryString, companyId)
if err != nil {
return persons, err
}
for rows.Next() {
var person Person
err = rows.Scan(
&person.PersonId,
&person.FirstName,
&person.LastName)
if err != nil {
return persons, err
}
log.Println(*person.PersonId) // 1, 2, 3 for both var patterns
persons = append(persons, person)
}
if rows.Err() != nil {
return persons, rows.Err()
}
return persons, err
}