请问下Go语言你们一般用哪个ORM库 gorm和beego orm这两个对比各有什么优缺点呢?

misitebao · 2019-09-27 16:40:38 · 24543 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2019-09-27 16:40:38 的主题,其中的信息可能已经有所发展或是发生改变。

我是一个Go语言新手,现在的orm也比较多 我本身是使用的beego做开发的 但是听大家说都基本用的是gorm 所以我想找用过的人对比下这两个 并且说下你们一般开发的时候是怎么去使用orm 已经有哪些需要注意的地方 谢谢大佬们


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

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

24543 次点击  ∙  1 赞  
加入收藏 微博
30 回复  |  直到 2022-01-10 11:54:20
beihai
beihai · #1 · 6年之前

用了gin和echo,beego没用过,听说自带的orm很一般.gorm和xorm都可以,按照文档来就行了

misitebao
misitebao · #2 · 6年之前
beihaibeihai #1 回复

用了gin和echo,beego没用过,听说自带的orm很一般.gorm和xorm都可以,按照文档来就行了

gorm 一般复杂的查询你们一般怎么做的

jarlyyn
jarlyyn · #3 · 6年之前

不用orm...

yjinglee
yjinglee · #4 · 6年之前

sqlx

lh948
lh948 · #5 · 6年之前

beego支持mariadb吗?

2xInG
2xInG · #6 · 6年之前
misitebaomisitebao #2 回复

#1楼 @beihai gorm 一般复杂的查询你们一般怎么做的

直接Raw("xxxxx")或者Table("xxx").Select("xxxxx").Joins("xxxxxx").Where("xxxxxx") 这样的

focusonline
focusonline · #7 · 6年之前
lh948lh948 #5 回复

beego支持mariadb吗?

mariaDB和mysql有啥区别么

misitebao
misitebao · #8 · 6年之前
jarlyynjarlyyn #3 回复

不用orm...

全部原生sql 撸嘛

misitebao
misitebao · #9 · 6年之前
lh948lh948 #5 回复

beego支持mariadb吗?

不清楚哦 应该支持吧 他和mysql 连接应该是一样的

misitebao
misitebao · #10 · 6年之前
2xInG2xInG #6 回复

#2楼 @kuaidjun 直接Raw("xxxxx")或者Table("xxx").Select("xxxxx").Joins("xxxxxx").Where("xxxxxx") 这样的

这个我知道 貌似有点麻烦的

misitebao
misitebao · #11 · 6年之前
focusonlinefocusonline #7 回复

#5楼 @lh948 mariaDB和mysql有啥区别么

我只知道前者开源 后者是甲骨文在维护的

jarlyyn
jarlyyn · #12 · 6年之前

@kuaidjun 自己写了个querybuilder,和一个根据sql结构生成go代码的代码生成器...

wn0112
wn0112 · #13 · 5年之前

现在是不是应该弃用ORM了?

之前python 项目用的sqlalchemy,数据库切到mysql8.0时会报错,因为sqlalchemy使用了mysql 的一些系统参数,这些参数在mysql8.0中弃用/改变了。需要升级sqlalchemy。使得程序对mysql 版本有了绑定依赖,升级数据库需要改程序。如果在代码里写纯 sql ,应该就不会遇到这个问题。

misitebao
misitebao · #14 · 5年之前
wn0112wn0112 #13 回复

现在是不是应该弃用ORM了? 之前python 项目用的sqlalchemy,数据库切到mysql8.0时会报错,因为sqlalchemy使用了mysql 的一些系统参数,这些参数在mysql8.0中弃用/改变了。需要升级sqlalchemy。使得程序对mysql 版本有了绑定依赖,升级数据库需要改程序。如果在代码里写纯 sql ,应该就不会遇到这个问题。

我觉得挺好的呀 简单的操作就用ORM去做 复杂的 ORM也提供的有自己写sql 的方式 我感觉挺好的

misitebao
misitebao · #15 · 5年之前
jarlyynjarlyyn #12 回复

@kuaidjun 自己写了个querybuilder,和一个根据sql结构生成go代码的代码生成器...

大佬 我是Go新手...

jarlyyn
jarlyyn · #16 · 5年之前
misitebaomisitebao #15 回复

#12楼 @jarlyyn 大佬 我是Go新手...

我觉得你可以先尝试下sql库。

对于轻量的使用比orm好用 多了。

sdghchj
sdghchj · #17 · 5年之前

个人觉得gorm浮肿。关系模型用对象模型来整,更麻烦。

xiaobowen
xiaobowen · #18 · 5年之前

go 的设计需要连每个error都要处理,你还不肯多写sql查询和映射嘛。用原生的吧

tablecell
tablecell · #19 · 3年之前

gorm.Model 是侵入性设计
xorm 有很多bug 比如id 更新零值 不如原生的sqlx 顶多把insert包装一下

niuxiangbo
niuxiangbo · #20 · 3年之前

对于有复杂sql的情况sqlx 是个不错的选择

jthmath
jthmath · #21 · 3年之前

复杂sql也可以gorm:

db.Raw()或db.Exec()

tablecell
tablecell · #22 · 3年之前
package main

import (
    "fmt"
    _ "github.com/mattn/go-sqlite3"
    "xorm.io/xorm"
)

type User struct {
    Id   int64
    Name string
    Age  int
}

var x *xorm.Engine

func main() {

    x, err := xorm.NewEngine("sqlite3", "x.db")

    affected, err := x.Exec(" CREATE TABLE `user` ( `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, `name` varchar,`age` integer );insert into `user` values (1,'test',20); ")
    fmt.Println(affected, err)

    a := &User{}
    has, err := x.ID(1).Get(a)
    fmt.Println(has, err, a)
    a.Name = "only id 1 update"
    a.Age = 0

    secc, err := x.ID(1).Update(a)
    fmt.Println(secc, err, a)

}

Exec 正确 Update 错误

xiangbei
xiangbei · #23 · 3年之前

Gorm

fenglangjuxu
fenglangjuxu · #24 · 3年之前

用beego框架的话 就用beego的 orm呗

都能满足你的需求 既然用了beego框架 就索性都用呗

eddy87
eddy87 · #25 · 3年之前
fenglangjuxufenglangjuxu #24 回复

用beego框架的话 就用beego的 orm呗 都能满足你的需求 既然用了beego框架 就索性都用呗

我也支持原汤化原食,既然用beego了 就用他自己的orm

czyt
czyt · #26 · 3年之前

ent

wn0112
wn0112 · #27 · 3年之前

gorm 无法区分值 0 , 和未填值的 0, "未用到的字段, 就不产生JSON key" 无效 , 或者说这是 go 的问题

aPilgrims
aPilgrims · #28 · 3年之前

狗都不用gorm

taatcc
taatcc · #29 · 3年之前

2楼 @misitebao 简单的查询 ,用orm好用 ,复杂点,就痛苦了,建议用原生 sql,自由

xwszt
xwszt · #30 · 3年之前

beego的ORM和Gorm都挺优秀的

在开发过程中注意两个工具的一些坑要避开,比如gorm的零值、主键非整形子增长等等

使用起来,两个都差不多,各有各的特色。

如果采用了Beego框架,那我建议你全部采用它的东西会更容易些,毕竟都整合好了。

如果自己搭架子,推荐gorm或者xorm,比如Gin、Gorm、gocron(用于定时任务处理)、logrus(日志记录)、redigo(redis缓存)

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