db.go 925 B

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