package model import ( "context" "fmt" sq "github.com/Masterminds/squirrel" "github.com/jmoiron/sqlx" ) type Category struct { ID int64 `db:"id"` Slug string `db:"slug"` Title string `db:"title"` Sort int `db:"sort"` } type CategoryModel interface { FindAll(ctx context.Context) ([]*Category, error) } type defaultCategoryModel struct { db *sqlx.DB } func NewCategoryModel(db *sqlx.DB) CategoryModel { return &defaultCategoryModel{db: db} } func (m *defaultCategoryModel) FindAll(ctx context.Context) ([]*Category, error) { query, args, err := sq. Select("id", "slug", "title", "sort"). From("public.categories"). Where(sq.GtOrEq{"sort": 1}). OrderBy("sort ASC", "id ASC"). Limit(10). PlaceholderFormat(sq.Dollar). ToSql() if err != nil { return nil, fmt.Errorf("squirrel 出错: %w", err) } rows := make([]*Category, 0) err = m.db.SelectContext(ctx, &rows, query, args...) if err != nil { return nil, fmt.Errorf("数据库查询出错: %w", err) } return rows, err }