go - 数据库返回空集时无效的内存地址或 nil 指针取消引用

标签 go revel gorp

当我将事件 ID 传递给 DisplayScanMembers(23) 时,如果 event_id 没有出现在数据库中,它会返回一个空集。然而,显然一个空集相当于一个 nil 指针(我猜)。因此,我无法将值(无指针)分配给 DisplayScanMembers 函数中的“member_s”。

如果数据库查询返回一个空集,我只需要让 getScanMembers 方法返回一个空数组而不是 nil。

我得到的错误:

错误 2014/10/22 23:08:19 panic.go:29:运行时错误:无效内存地址或零指针取消引用 /home/developer/gocode/src/drakecheckin/app/controllers/scan.go:236 (0x4a21f8)

func (c Scan) DisplayScanMembers(id int64) revel.Result{

if (id == -1 || id == 0){ 
    event,_ :=c.getLatestSelectedEvent();
    member_s,_ := c.getScanMembers(event.EventId);
    return members;
} else { 
    member_s,err2 := c.getScanMembers(id);
    if err2 !=nil {
                event,_ :=c.getLatestSelectedEvent();
                member_s,_ = c.getScanMembers(event.EventId);
    }
    return member_s;
}

}


func (c Scan) getScanMembers(event_id int64) (revel.Result,error) {

group_id,_ := convStrInt(c.Session["group_id"]);
org_id,_ := convStrInt(c.Session["org_id"]);;
query := "SELECT me.member_event_id,m.member_first_name,m.member_last_name,m.member_uniq_num "+
          "FROM MemberEvent AS me JOIN Member AS m ON m.member_id =me.member_id AND m.org_id =me.org_id "+
          "WHERE me.group_id=? AND me.org_id=? AND me.event_id=?"; 

members, err := c.Txn.Select(models.AllMemberEvent{}, query, group_id, org_id, event_id);
if err != nil {
    return nil,err;
}

return c.RenderJson(members),nil;

}

最佳答案

我认为您的问题出在“getScanMembers”函数中。你的返回语句是 revel.Result,如果你有错误,你这样做:

if err != nil {
    return nil, err;
}

但是你应该这样做:

if err != nil {
    return revel.Result{}, err;
}

关于go - 数据库返回空集时无效的内存地址或 nil 指针取消引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26521490/

相关文章:

go - 仅在 Golang 中递归的最外层函数上运行语句

algorithm - 标准库Priority Queue推送方法

pointers - 隐藏 nil 值,理解为什么 golang 在这里失败

go - 使用 Dokku 部署 Revel (Golang)

SelectInt gorp 上的 MySQL NULL 值问题

mysql - 如何从golang MySQL套件中获得详细的LOAD DATA结果?

docker 环境下的 Golang revel 框架热重载

json - 在 revel 中解析 json 日期时间

mysql - go - 如何使用 gorp select 获取空界面

postgresql - Go 和 postgres 将整数重新解释为 nil 类型