drxnfdx798517235 2014-10-23 04:49
浏览 56

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

When I pass event id in to DisplayScanMembers(23), if the event_id does not appear in the database, it returns an empty set. However, apparently an empty set is equivalent a nil pointer(I guess). Therefore I cannot assign the value(nil pointer) to 'member_s' in the DisplayScanMembers function.

All I need is for the getScanMembers method to return an empty array instead nil if the database query returns a empty set.

Error that I get:

ERROR 2014/10/22 23:08:19 panic.go:29: runtime error: invalid memory address or nil pointer dereference /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;

}
  • 写回答

1条回答 默认 最新

  • drdl18946 2015-01-23 15:40
    关注

    I think your problem in "getScanMembers" function. Your return statement is revel.Result, and if you have error, you doing this:

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

    But you should doing this:

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

报告相同问题?

悬赏问题

  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 Revit2020下载问题
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 单片机无法进入HAL_TIM_PWM_PulseFinishedCallback回调函数
  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 seatunnel 怎么配置Elasticsearch