最近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加油!!!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。