资讯专栏INFORMATION COLUMN

go语言orm之gorose全新版本2.0低调发布

wua_wua2012 / 3536人阅读

摘要:号称语言版本的发布了久违了版本新版本做了很大的改进和升级下面我们一起来看一下新版本的特性架构调整版本做了彻底的重构拥有全新的架构架构如图采用模块化架构通过的通信严格的上层依赖下层每一个模块都可以拆卸甚至可以自定义为自己喜欢的样子主模块初始化

号称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
结果集绑定模块, 所有的返回结果集都在这里

其他语言入手姿势

php: 使用过laravel的orm就可以快速上手使用

python: 使用过orator orm的用户,可以快速上手

ruby: 使用过rails的orm就可以快速上手

支持驱动

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或字符串表名

读写分离集群支持

海量数据自动分块处理

一键开启事务,自动回滚和提交

模块化架构,自由扩展

官方文档

最新版2.x文档

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())
}
官方网站

https://github.com/gohouse/gorose

官方qq群: 470809220,点击加入

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/62724.html

相关文章

  • golang ormgorose 2.0版本正式发布

    摘要:关于最风骚的版本的经过几个月的重构和打磨再加上近一个月的预览版测试和改进正式版终于与我们见面了新版本做出了重大改动和升级完全重构了基础架构和实现方式下面我们一起来看看的特点吧特点全新架构采用模块化分离架构主要分为大模块初始化和数据库链接配置 关于gorose 2.0 gorose, 最风骚的golang orm, php版本的laravel eloquent. 经过几个月的重构和打磨...

    android_c 评论0 收藏0
  • php开发者快速上手go使用gorose orm

    摘要:最近迷恋上了语言对有种特别的好感可是由于之前做了很久的开发刚开始用做开发有点不太习惯也许是之前的框架的过于好用所以导致了使用做开发的各种不适应于是想着找一个类似的用用找遍了生态圈发现了很多知名的诸如等发现没有一个是我的在体验了百般不爽之于痛 最近迷恋上了go语言, 对go有种特别的好感. 可是, 由于之前做了很久的php开发, 刚开始用go做web开发有点不太习惯, 也许是之前的 ...

    khs1994 评论0 收藏0
  • gorose orm+dotweb框架快速构建go web网站实战(一)

    摘要:网站功能结构规划和基础服务安装为了快速的构建一个网站在这里我们采用飞哥的组件和的框架来做网站实战首先我们需要做出一些基础的规划万丈高楼平地起我们先来给他打下地基做一下简单的模块和基本的网站要素规划一网站名字快新闻顾名思义就是要做到尽量简短一 网站功能结构规划和基础服务安装 为了快速的构建一个go web网站, 在这里, 我们采用 飞哥(fizzday) 的 gorose orm 组件和...

    nanchen2251 评论0 收藏0
  • gorose orm+dotweb框架快速构建go web网站实战(二)

    摘要:项目目录规划因为和框架都是基于独立的组件所以我们可以对项目的目录做出自由的规划在这里我们便规划一个遵循一般的结构的项目目录为了项目的易维护性和高可用性我们尽量采取成熟的架构分离业务模块这里就借鉴界最火爆的框架拉的设计思想做出简单的涉设计架构 go web项目目录规划 因为 gorose orm 和 dotweb 框架 都是基于独立的组件, 所以我们可以对项目的目录做出自由的规划. 在...

    ghnor 评论0 收藏0
  • gorose-最风骚的golang orm,链式操作, 开箱即用, 一分钟上手, 让golang操作

    摘要:最风骚的拥有链式操作开箱即用一分钟上手等八大风骚让操作数据库成为一种享受妈妈再也看不到我处理数据的痛苦了下面就让我一一讲解的风情风骚一开箱即用一分钟上手这里是配置文件中的数据库配置原生执行返回格式化后的结果风骚二链式操作尽显妩媚之姿风骚三直 gorose, 最风骚的go orm, 拥有链式操作, 开箱即用, 一分钟上手等八大风骚, 让golang操作数据库成为一种享受, 妈妈再也看不到...

    renweihub 评论0 收藏0

发表评论

0条评论

wua_wua2012

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<