package db import ( "go_dreamfactory/lego/utils/mapstructure" "time" ) //DB层配置 type DBConfig struct { Enabled bool //是否生效 RedisIsCluster bool //是否是集群 RedisAddr []string //redis 的集群地址 RedisPassword string //redis的密码 RedisDB int //数据库位置 MongodbUrl string MongodbDatabase string } type Option func(*Options) type Options struct { Loacl DBConfig //本服配置 Cross DBConfig //跨服配置 ServerList map[string]DBConfig //服务列表配置 } //设置本服配置 func SetLoacl(v DBConfig) Option { return func(o *Options) { o.Loacl = v } } //设置本服配置 func SetCross(v DBConfig) Option { return func(o *Options) { o.Cross = v } } //设置跨服区服列表 func SetServerList(v map[string]DBConfig) Option { return func(o *Options) { o.ServerList = v } } func newOptions(config map[string]interface{}, opts ...Option) (options *Options, err error) { options = &Options{ Loacl: DBConfig{}, Cross: DBConfig{}, ServerList: make(map[string]DBConfig), } if config != nil { if err = mapstructure.Decode(config, options); err != nil { return } } for _, o := range opts { o(options) } return } func newOptionsByOption(opts ...Option) (options *Options, err error) { options = &Options{} for _, o := range opts { o(options) } return } type DBOption func(*DBOptions) type DBOptions struct { IsMgoLog bool //是否写mgolog Expire time.Duration //过期时间 } //设置是否写mgor日志 func SetDBMgoLog(v bool) DBOption { return func(o *DBOptions) { o.IsMgoLog = v } } //设置过期时间 func SetDBExpire(v time.Duration) DBOption { return func(o *DBOptions) { o.Expire = v } } //更具 Option 序列化 系统参数对象 func newDBOption(opts ...DBOption) DBOptions { options := DBOptions{ IsMgoLog: true, } for _, o := range opts { o(&options) } return options }