ssh-manager/database/pool.go
2020-11-16 16:41:02 +08:00

47 lines
799 B
Go

package database
import (
"github.com/jinzhu/gorm"
"sync"
)
//type pool interface {
// newpool(newdb func()*gorm.DB,size int) *sqlpool
// get() (db *gorm.DB)
// put(db *gorm.DB)
//}
type sqlpool struct {
new func() *gorm.DB
db []*gorm.DB
sync.Mutex
}
func newpool(newdb func() *gorm.DB, size int) *sqlpool {
return &sqlpool{newdb, make([]*gorm.DB, 0, size), sync.Mutex{}}
}
func (s *sqlpool) get() (db *gorm.DB) {
s.Lock()
defer s.Unlock()
//log.Printf("before len:%d", len(s.db))
if len(s.db) > 0 {
db = s.db[len(s.db)-1]
s.db = s.db[:len(s.db)-1]
} else {
db = s.new()
}
//log.Printf("after len:%d", len(s.db))
return db
}
func (s *sqlpool) put(db *gorm.DB) {
s.Lock()
defer s.Unlock()
if len(s.db) < cap(s.db) {
s.db = append(s.db, db)
} else {
db.Close()
}
}