package postgres import ( "context" e "errors" "fmt" "github.com/jackc/pgconn" "github.com/jackc/pgx/v4" "github.com/jackc/pgx/v4/pgxpool" "github.com/sirupsen/logrus" "video_course/errors" "video_course/global" ) var writeDB *pgxpool.Pool func Init() { logrus.Info("初始化数据库") dbCfg, err := global.Config.GetPostgreSQL() if err != nil { panic(err) } writeCfg := dbCfg.Write connStr := fmt.Sprintf("host=%s port=%d user=%s dbname=%s password=%s sslmode=disable TimeZone=Asia/Shanghai", writeCfg.Host, writeCfg.Port, writeCfg.User, global.Project.DBName, writeCfg.Password) writeDB, err = pgxpool.Connect(context.Background(), connStr) if err != nil { logrus.Panicf("连接数据库失败:%v\n", err) panic(err) } } type base struct { c context.Context } func (b base) ctx() context.Context { if b.c == nil { b.c = context.Background() } return b.c } func (b base) writeDB() *pgxpool.Pool { return writeDB } func panicError(err error) { if err != nil { err = errors.NewFromError(err, errors.CodeDATABASE) panic(err) } } func panicExec(tag pgconn.CommandTag, err error) { if err != nil { if e.Is(err, pgx.ErrNoRows) { err = errors.NewFromError(err, errors.CodeNoRecord) } else { err = errors.NewFromError(err, errors.CodeDATABASE) } panic(err) } } func isRecordNotFound(err error) bool { if e.Is(err, pgx.ErrNoRows) { return true } else { panicError(err) return false } }