號稱go語言版本的laravel's eloquent, 發佈了久違了2.0版本, 新版本作了很大的改進和升級, 下面咱們一塊兒來看一下新版本的特性.php
gorose 2.0版本作了完全的重構, 擁有全新的架構. 架構如圖:
python
gorose 2.0 採用模塊化架構, 經過interface的api通訊,嚴格的上層依賴下層.每個模塊均可以拆卸, 甚至能夠自定義爲本身喜歡的樣子.mysql
主模塊laravel
database/sql
包的接口子模塊git
laravel
的orm就能夠快速上手使用orator orm
的用戶,能夠快速上手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...github
最新版2.x文檔sql
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);
實戰代碼api
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()) }