内容简介:号称go语言版本的laravel's eloquent, 发布了久违了2.0版本, 新版本做了很大的改进和升级, 下面我们一起来看一下新版本的特性.gorose 2.0版本做了彻底的重构, 拥有全新的架构. 架构如图:
号称 go 语言版本的laravel's eloquent, 发布了久违了2.0版本, 新版本做了很大的改进和升级, 下面我们一起来看一下新版本的特性.
架构调整
gorose 2.0版本做了彻底的重构, 拥有全新的架构. 架构如图:
gorose 2.0 采用模块化架构, 通过interface的api通信,严格的上层依赖下层.每一个模块都可以拆卸, 甚至可以自定义为自己喜欢的样子.
-
主模块
- engin
gorose 初始化配置模块, 可以全局保存并复用 - session 真正操作数据库底层模块, 所有的操作, 最终都会走到这里来获取或修改数据 - orm 对象关系映射模块, 所有的orm操作, 都在这里完成 - builder 构建终极执行的 sql 模块, 可以构建任何数据库的sql, 但要符合`database/sql`包的接口
-
子模块
- driver
数据库驱动模块, 被engin和builder依赖, 根据驱动来搞事情 - binder 结果集绑定模块, 所有的返回结果集都在这里
其他语言入手姿势
laravel orator orm rails
支持驱动
mysql : https://github.com/go-sql-dri...
sqlite3 : https://github.com/mattn/go-s...
postgres : https://github.com/lib/pq
oracle : https://github.com/mattn/go-oci8
mssql : https://github.com/denisenkom...
clickhouse : https://github.com/kshvakov/c...
特色
- 连接池
- 链式调用
- 支持传入struct,map或字符串表名
- 读写分离集群支持
- 海量数据自动分块处理
- 一键开启事务,自动回滚和提交
- 模块化架构,自由扩展
官方文档
api预览
db.Table().Fields().Where().GroupBy().Having().OrderBy.Limit().Select() db.Table().Data().Insert() db.Table().Data().Where().Update() db.Table().Where().Delete()
最佳实践
sql
DROP TABLE IF EXISTS "users"; CREATE TABLE "users" ( "uid" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "name" TEXT NOT NULL, "age" integer NOT NULL ); INSERT INTO "users" VALUES (1, 'gorose', 18); INSERT INTO "users" VALUES (2, 'goroom', 18); INSERT INTO "users" VALUES (3, 'fizzday', 18);
实战代码
package main import ( "fmt" "github.com/gohouse/gorose" _ "github.com/mattn/go-sqlite3" ) type Users struct { Uid int64 `gorose:"uid"` Name string `gorose:"name"` Age int64 `gorose:"age"` Xxx interface{} `gorose:"ignore"` // 这个字段在orm中会忽略 } func (u *Users) TableName() string { return "users" } var err error var engin *gorose.Engin func init() { // 全局初始化数据库,并复用 // 这里的engin需要全局保存,可以用全局变量,也可以用单例 // 配置&gorose.Config{}是单一数据库配置 // 如果配置读写分离集群,则使用&gorose.ConfigCluster{} engin, err = gorose.Open(&gorose.Config{Driver: "sqlite3", Dsn: "./db.sqlite"}) } func DB() gorose.IOrm { return engin.NewOrm() } func main() { // 这里定义一个变量db, 是为了复用db对象, 可以在最后使用 db.LastSql() 获取最后执行的sql // 如果不复用 db, 而是直接使用 DB(), 则会新建一个orm对象, 每一次都是全新的对象 // 所以复用 db, 一定要在当前会话周期内 db := DB() // 这里的对象是map, 所以需要初始化(var u = user{}), 不能像struct那样, 可以直接 `var u Users` var u = Users{} var count int64 // 统计数据 count,err = db.Table(&u).Fields("uid,name,age").Where("age",">",0).OrderBy("uid desc").Limit(10).Offset(1).Count() if err!=nil { fmt.Println(err) } // 查询数据并绑定到 user{} 上, 这里复用了 db 及上下文条件参数 // 如果不想复用,则可以使用DB()就会开启全新会话,或者使用db.Reset() // db.Reset()只会清除上下文参数干扰,不回更换链接,DB()则会更换链接 err = db.Select() fmt.Println(count) fmt.Println(u, u.Name.String()) fmt.Println(db.LastSql()) }
官方网站
以上所述就是小编给大家介绍的《go语言orm之gorose全新版本2.0低调发布》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 官宣!vue.ant.design 低调上线
- 案例:隐秘而低调的内存泄露(OOM)
- 性能超过人类炼丹师,AutoGluon 低调开源
- 推荐一位低调而有实力的大佬
- Python爬虫一步步抓取房产信息 | 岂安低调分享
- 苹果WWDC印象:凶残的节奏、低调亮剑AI
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Approximation Algorithms
Vijay V. Vazirani / Springer / 2001-07-02 / USD 54.95
'This book covers the dominant theoretical approaches to the approximate solution of hard combinatorial optimization and enumeration problems. It contains elegant combinatorial theory, useful and inte......一起来看看 《Approximation Algorithms》 这本书的介绍吧!