diff --git a/storage/sql/sql.go b/storage/sql/sql.go index 6aa4853..3491070 100644 --- a/storage/sql/sql.go +++ b/storage/sql/sql.go @@ -13,7 +13,7 @@ type Cfg struct { type Rows = sql.Rows type rowsProc = func(*sql.Rows) error -type Scanner interface{ Scan(*Rows) (Scanner, error) } +type Scanner[T any] interface{ Scan(*Rows) (T, error) } type Storage struct { *sql.DB @@ -28,12 +28,11 @@ func Open(cfg *Cfg) *Storage { return &Storage{db} } -func QueryData[T Scanner](db *Storage, q string, args ...interface{}) []T { +func QueryData[T Scanner[T]](db *Storage, q string, args ...interface{}) []T { var data []T proc := func(r *sql.Rows) error { var rec T - r1, err := rec.Scan(r) - rec = r1.(T) + rec, err := rec.Scan(r) data = append(data, rec) return err } diff --git a/tests/storage_test.go b/tests/storage_test.go index c150f75..1f4bb8f 100644 --- a/tests/storage_test.go +++ b/tests/storage_test.go @@ -35,7 +35,7 @@ type greet struct { label string } -func (g greet) Scan(rows *sql.Rows) (sql.Scanner, error) { +func (g greet) Scan(rows *sql.Rows) (greet, error) { err := rows.Scan(&g.id, &g.label) return g, err }