package main import ( "database/sql" "fmt" "time" _ "github.com/mattn/go-sqlite3" ) type DB struct { Ready bool path string readConn *sql.DB writeConn *sql.DB } func (db *DB) Open() error { if db.path == "" { return fmt.Errorf("database path not set") } writeConn, err := sql.Open("sqlite3", db.path+"?_journal=WAL&_synchronous=NORMAL") if err != nil { Error.Printf("%++v", err) return err } writeConn.SetMaxOpenConns(1) writeConn.SetConnMaxIdleTime(30 * time.Second) writeConn.SetConnMaxLifetime(30 * time.Second) db.writeConn = writeConn readConn, err := sql.Open("sqlite3", db.path+"?mode=ro&_journal=WAL&_synchronous=NORMAL&_mode=ro") if err != nil { Error.Printf("%++v", err) return err } readConn.SetMaxOpenConns(4) readConn.SetConnMaxIdleTime(30 * time.Second) readConn.SetConnMaxLifetime(30 * time.Second) db.readConn = readConn db.Ready = true return nil } func (db *DB) Close() error { err := db.writeConn.Close() if err != nil { return err } err = db.readConn.Close() if err != nil { return err } return nil }