第一步在init方法中配置数据库
第二步运行main方法即可出现结果
package main
import (
"fmt"
"github.com/go-pg/pg"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/postgres"
"time"
)
var dbConfig DatabaseConfig
func init(){
//在init方法中配置
dbConfig = DatabaseConfig{
User:"XXXX",
Password:"XXXX",
Addr:"XXXX",
Database:"XXXX",
PoolSize:20,
Slow:50,
Port:1234,
}
}
type DatabaseConfig struct {
User string
Password string
Addr string
Database string
PoolSize int
Slow int
Port int
}
type Database struct {
pg *pg.DB
pgorm *gorm.DB
}
func (db *Database) GetPg() *pg.DB {
return db.pg
}
func (db *Database) GetGorm() *gorm.DB {
return db.pgorm
}
func NewDataBase() *Database {
return &Database{
pg: newPgDB(),
pgorm: newGormDB(),
}
}
func newPgDB() *pg.DB {
return connectPg(
&pg.Options{
User: dbConfig.User,
Password: dbConfig.Password,
Database: dbConfig.Database,
Addr: fmt.Sprintf("%s:%d",dbConfig.Addr,dbConfig.Port),
ReadTimeout: time.Second * 10,
WriteTimeout: time.Second * 5,
IdleTimeout: time.Second * 120,
PoolSize: dbConfig.PoolSize,
}, dbConfig.Slow)
}
func newGormDB() *gorm.DB {
instance, err := gorm.Open("postgres", connStr())
if err!=nil{
return nil
}
instance.DB().SetConnMaxLifetime(time.Minute * 5)
instance.DB().SetMaxIdleConns(10)
instance.DB().SetMaxOpenConns(dbConfig.PoolSize)
instance.LogMode(true)
return instance
}
func connectPg(opt *pg.Options, slow int) *pg.DB {
db := pg.Connect(opt)
var n string
_, err := db.QueryOne(pg.Scan(&n), "select now() ")
if err != nil {
panic(err)
}
fmt.Println("connect pg %s %s success on %s", db.String(), opt.Database, n)
db.OnQueryProcessed(func(event *pg.QueryProcessedEvent) {
elapsed := time.Now().Sub(event.StartTime)
query, err := event.FormattedQuery()
if err != nil {
fmt.Println("pg event format err", err)
return
}
if event.Error != nil {
fmt.Println("sql:", query)
}
if elapsed > time.Duration(slow)*time.Millisecond {
fmt.Println("slow sql:",query)
}
})
return db
}
func main() {
db:=NewDataBase()
//测试查库
var n string
_, err := db.pg.QueryOne(pg.Scan(&n), "select now() ")
if err != nil {
panic(err)
}
fmt.Println(n)
}
func connStr() string {
connStr := fmt.Sprintf("host=%s user=%s dbname=%s sslmode=disable password=%s port=%d",
dbConfig.Addr,dbConfig.User,dbConfig.Database,dbConfig.Password,dbConfig.Port)
return connStr
}