github.com/go-srvc/mods/sqlmod
go get github.com/go-srvc/mods/sqlmod@v1.0.2
README
sqlmod
sqlmod wraps database/sql as a module and closes the connection pool gracefully when the application exits.
package main
import (
"fmt"
"net/http"
"os"
"github.com/XSAM/otelsql"
"github.com/go-srvc/mods/httpmod"
"github.com/go-srvc/mods/sigmod"
"github.com/go-srvc/mods/sqlmod"
"github.com/go-srvc/srvc"
semconv "go.opentelemetry.io/otel/semconv/v1.30.0"
_ "github.com/jackc/pgx/v5/stdlib"
)
func main() {
db := sqlmod.New(
sqlmod.WithOtel("pgx", os.Getenv("DSN"),
otelsql.WithAttributes(semconv.DBSystemNamePostgreSQL),
),
)
srvc.RunAndExit(
sigmod.New(os.Interrupt),
db,
httpmod.New(
httpmod.WithAddr(":8080"),
httpmod.WithHandler(handler(db)),
),
)
}
func handler(db *sqlmod.DB) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
var version string
if err := db.DB().QueryRowContext(r.Context(), "SELECT version()").Scan(&version); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
fmt.Fprintf(w, "db version: %s\n", version)
})
}
Overview
Package sqlmod wraps database/sql as a module.
Constants
const (
ErrDBNotSet = errStr("db not set")
ErrFailedOpenDB = errStr("failed to open db")
)const ID = "sqlmod"Types
type DB
type DB struct {
// contains filtered or unexported fields
}func (*DB) DB
func (d *DB) DB() *sql.DBDB returns the underlying *sql.DB. Only valid after Init has run.
func (*DB) ID
func (d *DB) ID() stringfunc (*DB) Init
func (d *DB) Init() errorfunc (*DB) Run
func (d *DB) Run() errorfunc (*DB) Stop
func (d *DB) Stop() errortype Opt
type Opt func(*DB) errorExamples
ExampleNew
package main
import (
"github.com/XSAM/otelsql"
"github.com/go-srvc/mods/sqlmod"
"github.com/go-srvc/srvc"
semconv "go.opentelemetry.io/otel/semconv/v1.30.0"
)
func main() {
srvc.RunAndExit(
sqlmod.New(
sqlmod.WithOtel("postgres", "user=foo dbname=bar sslmode=disable",
otelsql.WithAttributes(semconv.DBSystemNamePostgreSQL),
),
),
)
}