client.go 791 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package mysql
  2. import (
  3. "database/sql"
  4. "time"
  5. _ "github.com/go-sql-driver/mysql"
  6. )
  7. var mapClients map[string]*sql.DB
  8. func GetClient(dbhost, dbport, dbname, dbuser, dbpass string) (*sql.DB, error) {
  9. pattern := dbuser + ":" + dbpass + "@tcp(" + dbhost + ":" + dbport + ")/" + dbname
  10. _, exist := mapClients[pattern]
  11. if !exist {
  12. var err error
  13. mapClients[pattern], err = sql.Open("mysql", pattern+"?charset=utf8&parseTime=True")
  14. if err != nil {
  15. return nil, err
  16. }
  17. err = mapClients[pattern].Ping()
  18. if err != nil {
  19. return nil, err
  20. }
  21. }
  22. return mapClients[pattern], nil
  23. }
  24. func init() {
  25. mapClients = make(map[string]*sql.DB)
  26. timer := time.NewTicker(30 * time.Second)
  27. go func() {
  28. for {
  29. <-timer.C
  30. for _, db := range mapClients {
  31. db.Ping()
  32. }
  33. }
  34. }()
  35. }