博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
go中gorm和pg的common数据库配置
阅读量:2071 次
发布时间:2019-04-29

本文共 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/

你可能感兴趣的文章
Oracle数据库中的(+)连接
查看>>
java-oracle中几十个实用的PL/SQL
查看>>
PLSQL常用方法汇总
查看>>
几个基本的 Sql Plus 命令 和 例子
查看>>
PLSQL单行函数和组函数详解
查看>>
Oracle PL/SQL语言初级教程之异常处理
查看>>
Oracle PL/SQL语言初级教程之游标
查看>>
Oracle PL/SQL语言初级教程之操作和控制语言
查看>>
Oracle PL/SQL语言初级教程之过程和函数
查看>>
Oracle PL/SQL语言初级教程之表和视图
查看>>
Oracle PL/SQL语言初级教程之完整性约束
查看>>
PL/SQL学习笔记
查看>>
如何分析SQL语句
查看>>
结构化查询语言(SQL)原理
查看>>
SQL教程之嵌套SELECT语句
查看>>
日本語の記号の読み方
查看>>
计算机英语编程中一些单词
查看>>
JavaScript 经典例子
查看>>
判断数据的JS代码
查看>>
js按键事件说明
查看>>