41 lines
555 B
Go
41 lines
555 B
Go
|
|
package tradebook
|
||
|
|
|
||
|
|
import (
|
||
|
|
"database/sql"
|
||
|
|
_ "modernc.org/sqlite"
|
||
|
|
)
|
||
|
|
|
||
|
|
type tradebook struct {
|
||
|
|
driver string
|
||
|
|
dsn string
|
||
|
|
db *sql.DB
|
||
|
|
}
|
||
|
|
|
||
|
|
type openOption func(*tradebook) error
|
||
|
|
|
||
|
|
func Open(opts ...openOption) (*tradebook, error) {
|
||
|
|
t := tradebook{}
|
||
|
|
// Apply Options
|
||
|
|
for _, opt := range opts {
|
||
|
|
opt(&t)
|
||
|
|
}
|
||
|
|
|
||
|
|
db, err := sql.Open(t.driver, t.dsn)
|
||
|
|
t.db = db
|
||
|
|
if (err == nil) {
|
||
|
|
err = db.Ping()
|
||
|
|
}
|
||
|
|
|
||
|
|
return &t, err
|
||
|
|
}
|
||
|
|
|
||
|
|
func Sqlite(fpath string) openOption {
|
||
|
|
return func(t *tradebook) error {
|
||
|
|
t.driver = "sqlite"
|
||
|
|
t.dsn = fpath
|
||
|
|
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|