gone 发布 v1.1.1

98 阅读4分钟

v1.1.1

  • goner/xorm 支持集群 和 多数据库,最新文档:goner.fun/zh/referenc…
  • 新增 goner/gorm,封装gorm.io/gorm,用于数据库的访问,暂时只支持mysql,完善中...

1.goner/xorm支持集群

1.1 配置项

配置项必须默认值描述
database.cluster.enablefalse是否启用集群模式
database.driver-name否(非集群模式必填)-数据库驱动名称,支持mysql、sqlite3、postgres、oracle、mssql
database.dsn否(非集群模式必填)-数据库连接字符串
database.max-idle-count5连接池最大空闲连接数
database.max-open20连接池最大连接数
database.max-lifetime10m连接池连接最大存活时间
database.show-sqltrue是否打印SQL日志
database.cluster.master.driver-name否(集群模式必填)-主库数据库驱动名称,支持mysql、sqlite3、postgres、oracle、mssql
database.cluster.master.dsn否(集群模式必填)-主库数据库连接字符串
database.cluster.slaves[n].driver-name否(集群模式必填)-从库数据库驱动名称,支持mysql、sqlite3、postgres、oracle、mssql
database.cluster.slaves[n].dsn否(集群模式必填)-从库数据库连接字符串

1.1.1 非集群模式例子

database.driver-name=mysql
database.dsn=root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local

1.1.2 集群模式例子

database.cluster.enable=true

# 主数据库配置
database.cluster.master.driver-name=mysql
database.cluster.master.dsn=root:123456@tcp(master-db-host:3306)/test?charset=utf8mb4&parseTime=True&loc=Local

# 从数据库配置
database.cluster.slaves[0].driver-name=mysql
database.cluster.slaves[0].dsn=root:123456@tcp(slave-db-0-host:3306)/test?charset=utf8mb4&parseTime=True&loc=Local

database.cluster.slaves[1].driver-name=mysql
database.cluster.slaves[1].dsn=root:123456@tcp(slave-db-1-host:3306)/test?charset=utf8mb4&parseTime=True&loc=Local

database.cluster.slaves[2].driver-name=mysql
database.cluster.slaves[2].dsn=root:123456@tcp(slave-db-1-host:3306)/test?charset=utf8mb4&parseTime=True&loc=Local

# ... 更多从数据库

1.2 在代码中注入数据库引擎

import "github.com/gone-io/gone"

type struct dbUser struct {
	gone.Flag
	db gone.XormEngine `gone:"*"` //注入数据库引擎【集群模式,注入的是数据库集群,通过该方式获取的引擎查询数据时会随机到各从数据库,写入数据时会使用主数据库】
	masterDb gone.XormEngine `gone:"xorm,master"` // 注入主数据库,集群模式下有效
	slaveDb0 gone.XormEngine `gone:"xorm,slave=0"` //注入从数据库0,集群模式下有效
	slaveDb1 gone.XormEngine `gone:"xorm,slave=1"` //注入从数据库1,集群模式下有效
	slaveDbs []gone.XormEngine `gone:"xorm"`       //主入从数据库Slice,集群模式下有效
}

type Book struct {
	Id int64
	Title string
}

func (d *dbUser) GetBookById(id int64) (book *Book, err error) {
	book = new(Book)
	has, err := d.db.Where("id=?", id).Get(book)
	if err != nil {
		return nil, gone.ToError(err)
	}
	if !has {
		return nil, gone.NewParameterError("book not found", 404)
	}
	return book, nil
}

2 goner/xorm支持多数据库

2.1 配置多个数据库

多数据库配置前缀为database.{数据库名称},例如:database.db1database.db2

配置项必须默认值描述
{数据库配置前缀}.cluster.enablefalse是否启用集群模式
{数据库配置前缀}.driver-name否(非集群模式必填)-数据库驱动名称,支持mysql、sqlite3、postgres、oracle、mssql
{数据库配置前缀}.dsn否(非集群模式必填)-数据库连接字符串
{数据库配置前缀}.max-idle-count5连接池最大空闲连接数
{数据库配置前缀}.max-open20连接池最大连接数
{数据库配置前缀}.max-lifetime10m连接池连接最大存活时间
{数据库配置前缀}.show-sqltrue是否打印SQL日志
{数据库配置前缀}.cluster.master.driver-name否(集群模式必填)-主库数据库驱动名称,支持mysql、sqlite3、postgres、oracle、mssql
{数据库配置前缀}.cluster.master.dsn否(集群模式必填)-主库数据库连接字符串
{数据库配置前缀}.cluster.slaves[n].driver-name否(集群模式必填)-从库数据库驱动名称,支持mysql、sqlite3、postgres、oracle、mssql
{数据库配置前缀}.cluster.slaves[n].dsn否(集群模式必填)-从库数据库连接字符串

2.2 多数据库注入

import "github.com/gone-io/gone"

type struct dbUser struct {
	gone.Flag

	// 注入`{数据库配置前缀}`为`database.db1`的数据库引擎【集群模式,注入的是数据库集群,通过该方式获取的引擎查询数据时会随机到各从数据库,写入数据时会使用主数据库】
	db1 gone.XormEngine `gone:"xorm,db=database.db1"`

	// 注入`{数据库配置前缀}`为`database.db1`的主数据库,集群模式下有效
	masterDb gone.XormEngine `gone:"xorm,db=database.db1,master"`

	// 注入`{数据库配置前缀}`为`database.db1`的从数据库0,集群模式下有效
	slaveDb0 gone.XormEngine `gone:"xorm,db=database.db1,slave=0"`

	// 注入`{数据库配置前缀}`为`database.db1`的从数据库1,集群模式下有效
	slaveDb1 gone.XormEngine `gone:"xorm,db=database.db1,slave=1"`

	// 主入`{数据库配置前缀}`为`database.db1`的从数据库Slice,集群模式下有效
	slaveDbs []gone.XormEngine `gone:"xorm,db=database.db1"`
}

完整文档