Gorm 使用记录: 无法获取值

Casso_W · · 82 次点击 · · 开始浏览    
  • 首先,在golang里面所有函数的传参都是传副本
  • 我的错误在于认为切片是属于引用类型的就不用传指针进去了,结果事实证明,不管是不是引用类型,都需要传指针才能改变原值
// Contact 通讯录    *********//  db/contact.go
type Contact struct {
    gorm.Model
    Usr       int    `json:"usr"`                        // 归属人id
    Typ       int    `gorm:"default:1" json:"type"`      // 类型 1 单人 2 群聊
    Remark    string `json:"remark"`                     // 备注
    TargetID  int    `json:"target_id"`                  // 好友id
    AddTyp    int    `json:"add_typ"`                    // 添加类型 1 扫码 2 手机通讯录 3 搜索添加 4 附近的人
    Important int    `gorm:"default:0" json:"important"` // 星标 1 是 0 否
    Status    int    `gorm:"default:0" json:"status"`    // 0 添加未同意  1 添加已同意 2 已拉黑
}

// GetContacts 获取用户联系人列表 *******// service/contactlogi.go
func GetContacts(c *gin.Context) {
    meMobile := c.GetString("usrname") // 此处是手机号:从token中解析出来
    // 1. 验证获取登录用户ID
    // 2. 根据本用户ID 获取对应的联系人列表
    // 3. 本列表移动端应缓存起来
    var me appuser.User
    me.Mobile = meMobile
    if err := me.CheckUser(&me); err == nil {
        var con contat.Contact
        var res []*contat.Contactlist
        if err := con.GetListByid(&res, int(me.ID)); err == nil {  // here
            response.ReturnJSON(c, http.StatusOK, statuscode.Suucess.Code, statuscode.Suucess.Msg, res)
        } else {
            response.ReturnJSON(c, http.StatusOK, statuscode.Faillure.Code, statuscode.Faillure.Msg, nil)
        }
    } else {
        response.ReturnJSON(c, http.StatusOK, statuscode.UserNotExit.Code, statuscode.UserNotExit.Msg, meMobile)
    }
}

下面是 db/contact.go

// GetListByid 通过登录用户ID获取列表
func (c *Contact) GetListByid(res *[]*Contactlist, target int) error {
    return appmysql.DB.Table("contacts").Select("contacts.usr,contacts.important,contacts.add_typ,users.nick_name,users.icon,users.desc,users.gender,users.mobile").Joins("left join users on users.id = contacts.target_id").Where("contacts.usr = ?", target).Scan(&res).Error
}

总结
  • 在使用gorm的过程中, 获取值都需要使用指针变量; 接收者方法,接收者也 建议是指针

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:Casso_W

查看原文:Gorm 使用记录: 无法获取值

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:1006366459

82 次点击  
加入收藏 微博
上一篇:Go | 开发简介
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传