mirror of
https://github.com/tobycroft/gorose-pro.git
synced 2025-09-26 20:51:27 +08:00
42 lines
795 B
Go
42 lines
795 B
Go
package gorose
|
|
|
|
import (
|
|
"sync"
|
|
)
|
|
|
|
// BuilderDriver ...
|
|
type BuilderDriver struct {
|
|
builders map[string]IBuilder
|
|
b *sync.Map
|
|
}
|
|
|
|
var builderDriverOnce sync.Once
|
|
var builderDriver *BuilderDriver
|
|
|
|
// NewBuilderDriver ...
|
|
func NewBuilderDriver() *BuilderDriver {
|
|
builderDriverOnce.Do(func() {
|
|
//builderDriver = &BuilderDriver{builders:make(map[string]IBuilder)}
|
|
builderDriver = &BuilderDriver{b: &sync.Map{}}
|
|
})
|
|
return builderDriver
|
|
}
|
|
|
|
// Register ...
|
|
func (b *BuilderDriver) Register(driver string, val IBuilder) {
|
|
//withLockContext(func() {
|
|
// b.builders[driver] = val
|
|
//})
|
|
b.b.Store(driver, val)
|
|
}
|
|
|
|
// Getter ...
|
|
func (b *BuilderDriver) Getter(driver string) IBuilder {
|
|
|
|
//return b.builders[driver]
|
|
if v, ok := b.b.Load(driver); ok {
|
|
return v.(IBuilder)
|
|
}
|
|
return nil
|
|
}
|