Go-Back-Skeleton/vendor/github.com/go-pg/pg/orm/tables.go
2017-09-25 20:20:52 +02:00

39 lines
555 B
Go

package orm
import (
"fmt"
"reflect"
"sync"
)
var Tables = newTables()
type tables struct {
mu sync.RWMutex
tables map[reflect.Type]*Table
}
func newTables() *tables {
return &tables{
tables: make(map[reflect.Type]*Table),
}
}
func (t *tables) Get(typ reflect.Type) *Table {
if typ.Kind() != reflect.Struct {
panic(fmt.Errorf("got %s, wanted %s", typ.Kind(), reflect.Struct))
}
t.mu.RLock()
table, ok := t.tables[typ]
t.mu.RUnlock()
if ok {
return table
}
t.mu.Lock()
table = newTable(typ)
t.mu.Unlock()
return table
}