// // db.go // Copyright (C) 2022 tiglog // // Distributed under terms of the MIT license. // package sqldb import ( "database/sql" "errors" "strings" "github.com/jmoiron/sqlx" ) var Db *Engine type Engine struct { *sqlx.DB } var ErrNoRows = sql.ErrNoRows type DbOption struct { Url string MaxOpenConns int MaxIdleConns int } // mysql://[username[:password]@][protocol[(address)]]/dbname[?param1=value1&...¶mN=valueN] // pgsql://host=X.X.X.X port=54321 user=postgres password=admin123 dbname=postgres sslmode=disable" func NewWithOption(opt *DbOption) *Engine { urls := strings.Split(opt.Url, "://") if len(urls) != 2 { panic(errors.New("wrong database url:" + opt.Url)) } dbx, err := sqlx.Open(urls[0], urls[1]) if err != nil { panic(err) } dbx.SetMaxIdleConns(opt.MaxIdleConns) dbx.SetMaxOpenConns(opt.MaxOpenConns) err = dbx.Ping() if err != nil { panic(err) } Db = &Engine{ dbx, } return Db } func New(url string) *Engine { opt := &DbOption{Url: url, MaxOpenConns: 256, MaxIdleConns: 2} return NewWithOption(opt) }