本文共 2330 字,大约阅读时间需要 7 分钟。
第一步在init方法中配置数据库
第二步运行main方法即可出现结果
package mainimport ( "fmt" "github.com/go-pg/pg" "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/postgres" "time")var dbConfig DatabaseConfigfunc 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}
转载地址:http://sypmf.baihongyu.com/