在 PostgreSQL 数据库中我有一个表:| ORGANIZATION_ID | FACTOR_IDS | CALCULATION_VALUES ||-----------------|--------------|---------------------|| 1 | {1,2,3,4,5} | {0,66.66,50,100,80} || 2 | NULL | NULL || 1 | {6,7,8,9,10} | {0,77.77,60,110,90} |在 Go 中,我对该表进行查询,然后尝试使用该Scan方法。不幸的是我收到一个错误:Trace: runtime error: invalid memory address or nil pointer dereference我的代码:type Entry struct { OrganizationID int FactorIDS pq.Int64Array CalculationValues pq.Float64Array}rows, err = database.DBGORM.Raw(`SELECT * FROM ANALYTICS`, ID).Rows()if err != nil { utils.Logger().Println(err) return}defer rows.Close()for rows.Next() { var entry *Entry if err = rows.Scan(&entry.OrganizationID, &entry.FactorIDS, &entry.CalculationValues); err != nil { utils.Logger().Println(err) // <- RAISE ERROR return } if entry.FactorIDS != nil { for index, value := range factorID { // some code here } }}我该如何解决这个问题?另外,如果我将类型从 更改pq.Int64Array为*pq.Int64ArrayGo 编译器,则会出现错误:Cannot range over data *pq.Int64Array对于上面的代码。
2 回答
catspeake
TA贡献1111条经验 获得超0个赞
nil 指针解除引用已开启entry。entry通过将指针更改为值来修复:
for rows.Next() {
var entry Entry // <--- change on this line
... remaining code as in question
}
汪汪一只猫
TA贡献1898条经验 获得超8个赞
由于这些 &entry.OrganizationID、&entry.FactorIDS、&entry.CalculationValues,它令人恐慌。由于条目是指针类型,并且您尚未为其初始化内存。如果你想要指针类型的结构,你可以像这样初始化它:
for rows.Next() {
entry:=new(Entry)
if err = rows.Scan(&entry.OrganizationID, &entry.FactorIDS, &entry.CalculationValues); err != nil {
utils.Logger().Println(err) // <- RAISE ERROR
return
}
if entry.FactorIDS != nil {
for index, value := range factorID {
// some code here
}
}
}
- 2 回答
- 0 关注
- 116 浏览
添加回答
举报
0/150
提交
取消