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 } }