db.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package db
  2. import (
  3. "database/sql"
  4. "time"
  5. )
  6. type Env interface {
  7. GetAppPort() string
  8. GetDBHost() string
  9. GetDBPort() string
  10. GetDBName() string
  11. GetDBUser() string
  12. GetDBPassword() string
  13. GetDBMaxOpenConns() int
  14. GetDBMaxIdleConns() int
  15. GetDBMaxConnLifetime() int
  16. GetDBMaxIdleConnLifetime() int
  17. }
  18. func Init(env Env) (*sql.DB, error) {
  19. dataSource := "user=" + env.GetDBUser() +
  20. " password=" + env.GetDBPassword() +
  21. " dbname=" + env.GetDBName() +
  22. " host=" + env.GetDBHost() +
  23. " port=" + env.GetDBPort() +
  24. " sslmode=disable"
  25. db, err := sql.Open("postgres", dataSource)
  26. if err != nil {
  27. return nil, err
  28. }
  29. if env.GetDBMaxOpenConns() > 0 {
  30. db.SetMaxOpenConns(env.GetDBMaxOpenConns())
  31. }
  32. if env.GetDBMaxIdleConns() > 0 {
  33. db.SetMaxIdleConns(env.GetDBMaxIdleConns())
  34. }
  35. if env.GetDBMaxConnLifetime() > 0 {
  36. db.SetConnMaxLifetime(time.Second * time.Duration(env.GetDBMaxConnLifetime()))
  37. }
  38. if env.GetDBMaxIdleConnLifetime() > 0 {
  39. db.SetConnMaxIdleTime(time.Second * time.Duration(env.GetDBMaxIdleConnLifetime()))
  40. }
  41. if err = db.Ping(); err != nil {
  42. return nil, err
  43. }
  44. return db, nil
  45. }