イベント ID を DisplayScanMembers(23) に渡すと、event_id がデータベースに表示されない場合、空のセットが返されます。ただし、明らかに空のセットは nil ポインターと同等です (推測します)。したがって、DisplayScanMembers 関数で値 (nil ポインター) を「member_s」に割り当てることはできません。
必要なのは、データベース クエリが空のセットを返す場合に、getScanMembers メソッドが nil ではなく空の配列を返すことだけです。
私が得るエラー:
エラー 2014/10/22 23:08:19 panic.go:29: ランタイム エラー: 無効なメモリ アドレスまたは nil ポインターの逆参照 /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;
}