最近go语言界新出的一个web框架murphy(墨菲 https://gitee.com/oshine/murphy),对比使用了下,特来写点感受:

1.gin框架是一个http框架,本身里面没有集成相关的数据库模型操作,如果想操作数据库,需要额外的库,这点没有murphy框架方便。

2.gin web框架获取用户详情需要安装orm框架,定义好模型,然后使用orm框架来查询数据库。

3.murphy web框架本身基于fasthttp框架,其速度大家都了解,go的http框架内无对手,murphy框架就相当于http框架和orm框架融合一种全新框架,写道这里能看出来,我更喜欢的是myrphy这个轻量高性能框架,原因如下:

4.如果你有数据库表,想生成对应的模型,直接使用 auto gen dao table_name 即可,甚至dao 结构模型和controller层都可以使用auto命令来生成,这真的太方便了,对于想偷懒的码农可以节省大把时间用来摸鱼,更多的命令如下(或者这里找到:https://gitee.com/oshine/auto-murphy

-- auto gen dao all/table_name # 数据结构生成命令
-- auto gen mod all/table_name # 数据表基础模型生成命令
-- auto gen model all/table_name # 数据表模型文件生成命令
-- auto gen ctl all/table_name # 控制器生成命令

5.murphy数据库插入更新删除操作

我们来看下例子,查询用户详情(只需几行代码):

// MemberController 中的detail接口


// api/member/detail 用户详情接口
func (self *MemberController) Detail(ctx *fasthttp.RequestCtx) error {

    self.WithCtx(ctx)

    id := self.Params("id")

    obj := &model.Member{}
    if obj.Init().FindFirstById(id) {
        // obj.Delete() // 删除
        return self.RenderJson(obj.ToDetailJson()).Out()
    }

    return self.RenderJson(nil).Err("not find item.").Out()
}

// api/member/reset_password 重置密码接口
func (self *MemberController) ResetPassword(ctx *fasthttp.RequestCtx) error {
    self.WithCtx(ctx)

    oldPassword := self.Params("old_password") // 获取post form表单参数 old_password
    password := self.Params("password")
    passwordAgain := self.Params("password_again")
    if passwordAgain != password {
        return self.Error("两次密码不一致")
    }
    member := self.Member // 任意controller鉴权成功后都会有Member对象,直接获取即可
    if member.CheckPassword(&oldPassword) {
         
      member.GetDao().SetPassword(password) // 获取dao结构体后设置字段
      member.Save() // 保存更新数据

      return self.Success("ok")
         
    }
    return self.Error("原密码错误")

}

// Member 模型中的ToDetailJson()方法,注意此方法是由auto工具自动生成

func (m *Member) ToDetailJson() any {
    mt := m.GetDao()

    return def.Map{
        "id":       mt.Id,
        "username": mt.Username,
        "sid":      mt.Sid,
        "avatar":   m.getAvatar(mt),
    }
}

插入新记录只需初始化要一个新的模型,比如这里需要创建一条通知消息

notify := &model.notify{}

notify.AtDao(func(r *dao.Notify) { // 这里面的数据结构都是auto工具根据数据表动态生成
  r.SetTitle("点赞了您的帖子")
  r.SetMemberId(memberId)
  r.SetTargetId(reportId)
  r.SetReceiverId(receiverId)
}).UpdateTm().Save()

底层基于redis和ssdb缓存存储,查询速度极快,还是很强的,好久没见过这么强的框架了,有兴趣的可以去读读官方的demo: https://gitee.com/oshine/free-api

总结下:gin都老生常谈了,但是面对新生强劲框架,依然需要保持一个学习心态,gopher加油!!!


Jacky001
1 声望0 粉丝