package db import ( "context" "database/sql" "fmt" "time" _"embed" _ "github.com/mattn/go-sqlite3" ) //go:embed schema.sql var schema string func NewDB(ctx context.Context, URI string)(db *sql.DB, err error) { params := "cache=shared&_foreign_keys=on&_busy_timeout=3000&_journal_mode=WAL" db, err = sql.Open("sqlite3", fmt.Sprintf("%s?%s", URI, params)) if err != nil { return nil, fmt.Errorf("connecting %w", err) } // test conn err = db.PingContext(ctx) if err != nil { return nil, fmt.Errorf("ping Error %w", err) } db.SetConnMaxIdleTime(5*time.Second) CreateTables(db) return db, nil } func CreateTables(db *sql.DB) { _, err := db.Exec(schema) if err != nil { panic(err) } }