connect.go 867 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package conn
  2. import (
  3. "context"
  4. "fmt"
  5. "net"
  6. "strings"
  7. _ "github.com/go-sql-driver/mysql"
  8. "github.com/jmoiron/sqlx"
  9. )
  10. type OptionQuery map[string]string
  11. func (o OptionQuery) String() string {
  12. s := make([]string, 0)
  13. for k, v := range o {
  14. s = append(s, fmt.Sprintf("%s=%s",
  15. k, v,
  16. ))
  17. }
  18. if len(s) == 0 {
  19. return ""
  20. }
  21. return fmt.Sprintf("?%s",
  22. strings.Join(s, "&"),
  23. )
  24. }
  25. type DBOpts struct {
  26. User string
  27. Pass string
  28. Host net.Addr
  29. Db string
  30. Opt OptionQuery
  31. }
  32. type DB struct {
  33. *sqlx.DB
  34. Opts *DBOpts
  35. }
  36. func Connect(opts *DBOpts, ctx context.Context) (*DB, error) {
  37. db, err := sqlx.ConnectContext(ctx, "mysql", fmt.Sprintf(
  38. "%s:%s@%s(%s)/%s%s",
  39. opts.User,
  40. opts.Pass,
  41. opts.Host.Network(),
  42. opts.Host.String(),
  43. opts.Db,
  44. opts.Opt,
  45. ))
  46. if err != nil {
  47. return nil, err
  48. }
  49. return &DB{
  50. DB: db,
  51. Opts: opts,
  52. }, nil
  53. }